简单的C程序<一>:字符间空格处理

来源:互联网 发布:seo关键词怎么分 编辑:程序博客网 时间:2024/05/29 03:59

简单的C程序<一>:字符串处理

问题一:编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。

解法一:

#include <stdio.h>#include <stdbool.h>  //bool类型所需的头文件int main(void){    int c;    bool flag = true;    while ( (c=getchar()) != EOF)    {        if (c!=' ')        {            flag = true;            putchar(c);        }        else if (flag==true)        {            flag = false;            putchar(' ');        }    }       return 0;}

总结:主要用一个flag标记下第一次遇到空格的时候。

解法二:(错误版本)

#include <stdio.h>int main(void){    int c,i;    i = 0;    while ( (c=getchar()) != EOF)    {        if (c != ' ')            putchar(c);        else        {            putchar(c);            while ( (c=getchar())==' ');            /*当getchar取出的数不是空格,则跳出次循环,到外面的这个大的while循环,接着用getchar取下一个循环,这样就错过了一个不是空格的打印输出*/        }    }    return 0;   }

解法二(正确版本):

#include <stdio.h>int main(void){    int c;    while ( (c=getchar()) != EOF)    {        if (c == ' ')        {            putchar(c);             while ( (c=getchar()) ==' ' && c!=EOF );        }        if (c == EOF )            break;        putchar(c);    }    return 0;}

总结:主要是对getchar函数的使用方面总结下:
从键盘输入到getchar函数的过程实际上如下:输入设备->内存缓冲区->程序getchar()
详细的说:第一次getchar()时若从键盘输入很多字符(一般也是这样的),以后的getchar()再执行时就会直接从缓冲区中读取了。你按的键是放进缓冲区了,然后供程序getchar读取。一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到’\n’,(而这也是常用的)
那么问题来了:学挖掘机哪家强?哈哈
其实是到底缓冲区又是多大呢?输入多少缓冲区会满呢?

解法三:

#include <stdio.h>int main(void){    int c,pc;    pc = EOF;    while ( (c=getchar()) != EOF)    {        if (c != ' ')            putchar(c);        else if (c==' ' && pc!=' ')            putchar(c);        pc = c;    }    return 0;}

总结:用一个pc指代前面的字符c前面的字符。

那么问题又来了:如果有要求有字符之间有2个空格,3个空格呢,k个空格呢?
见下一节简单的C程序吧。

0 0
原创粉丝点击