用C中的一个空格替换多个空格

时间:2013-06-04 14:02:15

标签: c replace space

我正在编写一些简单的c编程代码,用一个空格替换多个空格的字符串。我的代码如下,但它显然包含错误。我试图避免使用数组或指针。关于如何纠正错误的任何建议?

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

8 个答案:

答案 0 :(得分:3)

在进行这种过滤时,从不重复读取输入通常是一个好主意,因为这往往会分散逻辑。至少根据我的经验,如果我在一个的地方阅读输入然后处理它,我会发现它更容易。

对于这个问题,一个简单的状态机就足够了:只记得最后一个字符是否为空白,如果读取的最后一个字符不是空白,则只输出空白。

答案 1 :(得分:2)

首先:避免使用getcharputchar。请改用getcputc

如果你非常想逐个字符阅读,那么这样的事情会:

int c, lastc = '\0';
while((c = getc(stdin)) != EOF) {
    if (c == ' ' && lastc == ' ')
        continue;
    putc(c, stdout);
    lastc = c;
}

答案 2 :(得分:1)

如果您读过空白,请使用标记来记住:

#include <stdio.h>

int main( void )
{
  int lastBlank = 0;
  int c;

  while ( (c = fgetc( stdin )) != EOF )
  {
    if ( c != ' ' || !lastBlank )
      fputc( c, stdout );

    lastBlank = ( c == ' ' );
  }
  return 0;
}

答案 3 :(得分:0)

此代码似乎工作正常:

#include <stdio.h>

int main(void)
{
    int c, d;
    d = 0;
    while ((c = getchar()) != EOF)
    {
        if (c == ' ')
        {
            while ((d = getchar()) == ' ');
            putchar(c);
            putchar(d);
        } else {
            putchar(c);
        }
    }
}

答案 4 :(得分:0)

#include<stdio.h>

int nextChar(FILE *fp){
    static int buff = 0;
    int ch = fgetc(fp);
    if(buff != ch)
        buff = ch;
    else
        while(buff == ' ')
            buff = fgetc(fp);
    return buff;
}

int main(void){
    FILE *fp = stdin;
    int ch;
    while(EOF!=(ch=nextChar(fp))){
        putchar(ch);
    }
    return 0;
}

答案 5 :(得分:0)

# include <stdio.h>

int main(){

  int c , n;
    n=0;

    while((c=getchar())!= EOF) {
        if (c == '\t') {

            if (n<1){
                putchar('\t');
                n=n+1;
            }
        }
        else {
            n=0;
            putchar(c);
        }
    }
}

答案 6 :(得分:0)

#include <stdio.h>

/*copy input to output, replacing each 
string of one or more blanks by a single blank.*/

main() {

    int c;

    while((c =getchar()) != EOF) {
        if (c!= ' ') 
            putchar(c);
        else {
            putchar(c);
            while((c =getchar()) == ' ');
            putchar(c);
        }
    }
}

答案 7 :(得分:0)

#include <stdio.h>

int main() {
    int c;

    while((c = getchar()) != EOF) {
        if (c != ' ')
            putchar(c);
        if (c == ' ') {
            // if we found a blank continue reading
            // searching for additional blanks
            // put one blank char to output stream
            // put the char that casue the while loop to exit
            while((c = getchar()) == ' ');
            putchar(' ');
            putchar(c);
        }
    }
}

使用包含不同数量空白的简单文件进行测试会产生正确的行为

➜  course-c cat data
one space two  spaces three   spaces four   spaces five     spaces


➜  course-c ./replace.blank < data
one space two spaces three spaces four spaces five spaces