【问题标题】:How to replace multiple blank lines with a single line in C languageC语言中如何用单行替换多个空行
【发布时间】:2015-03-17 01:19:40
【问题描述】:

我想在一行中压缩多行。我试图应用我自己的逻辑,但有问题。

 char *p;
                    linecount=0;
                    while (fgets(buffer, sizeof(buffer), file))
                    {

                    //it will print the user input with number
                    p=buffer;

                    if('\r' == *p ||'\n' == *p )
                    {

                        linecount++;
                       if(linecount>2 )
                        printf("\n");
                    }

                    else
                    {
                        linecount=0;
                             printf("\t %s", p);

                    }

例如一个文件有类似的行

a
b


c


d
e

那么输出应该是

a
b

c

d
e

基本上,我正在开发 cat -s 命令的代码。

【问题讨论】:

    标签: c linux unix cat


    【解决方案1】:

    在你的 if 块中:

    if(linecount>2 )
        printf("\n");
    

    你正在做的是打印出第 3、4、..N 个空白行。

    第一个空白like 的 linecount = 1

    第二个空白like 的 linecount = 2

    我会把这个逻辑颠倒过来

    if( linecount == 0 ){
        linecount++;
        printf("\n");
    }
    

    这样,你只会打印出换行列表中的第一个空行。

    【讨论】:

      【解决方案2】:

      你为什么使用 fgets? (更重要的是,为什么不处理大于缓冲区的行?)您一次只需要查看一个字符:

      #include <stdio.h>
      
      int main(void) {
          int c;
          int count=0;
          while((c=getchar())!=EOF) {
              if(c=='\n'){
                  if(++count>2)
                    continue;
              } else {
                  count=0;
              }
              putchar(c);
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多