删除尾随空白

时间:2012-08-24 13:24:13

标签: c if-statement whitespace

我正在研究k& r,我正在研究问题1-18。编写程序以从每行输入中删除TRAILING空白和制表符,并删除完全空行。我的想法是读取每一行并计算空格数。如果它是第一个使用putchar的空白打印。如果有第二个空白不打印它并将空格重置为0.然后继续读取并删除空格。

目前我只需要打印其他任何内容,因为我试图一点一点地做。一旦我运行这个程序,我会在终端中得到其中的两个。我认为我在错误地嵌套if语句或else语句时遇到了问题,我之前遇到了一些错误。我是否正在以正确的方式去除空白的逻辑?如果有人能指出我正确的方向来修复代码,我将不胜感激。

#include <stdio.h>

main()
{
    int c, i, spaces;             /*c for input, i for counting*/

    i = 0;
    c = 0;
    spaces = 0;
    while ((c = getchar())!=EOF)
            if(spaces = 0 && c == ' ')
                    ++spaces;
                    putchar(c);
                    if(spaces >= 1)
                            spaces = 0;
            else {
                    putchar(c);
            }


}

2 个答案:

答案 0 :(得分:2)

尝试:

if(spaces == 0 && c == ' ')
{
   ++spaces;
   putchar(c);
   if(spaces >= 1)
      spaces = 0;
}
else 
{
   putchar(c);
}

您的缩进建议您希望else分支与第一个分支一起使用,但就像现在一样,它与内部if对应。

此外,spaces = 0是作业,spaces == 0是比较。

答案 1 :(得分:0)

  • 读一个字符串。
  • 使用strlen()或类似方法查找字符串的结尾。
  • for(i=string_length-i; i>=0; i--)或者如果您愿意,可以使用指针。
  • 在找到第一个非空格时断开循环。
  • 在第一个非空格+ 1处插入空终止。