如何从C中的char删除空白行?

时间:2018-10-01 23:00:21

标签: c

我有一个简单的c程序,该程序从文件中读取数据,并且应该每行打印一个单词,删除所有标点和空白行。我被困在检测和删除空白行。

这是代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *f;
    //char filename[15];
    char ch;


    f = fopen("index.txt","r");
    if (f == NULL)
    {
        printf("Cannot open file \n");
        exit(0);
    }

    ch = fgetc(f);
    while (ch != EOF)
    {
        ch = fgetc(f);
        putchar (ch);
        if (ch == ' ' || ch == '\n' || ch == '\t'){
            printf("\n");
        }

        else if(ch == ',' || ch == '.'){
            printf("");
        }


    }

    fclose(f);
    return 0;
}

我想到了这样删除标点符号: 否则if(ch ==','|| ch =='。'){printf(“”);}

,但也不起作用。

1 个答案:

答案 0 :(得分:2)

在代码中出现错误的地方:

  • 您正以偏见跳过第一个字符。
  • ch的类型应该是int,而不是char
  • 您应该将字符分为两类:空白字符和非空白字符。
  • 您应该只打印第二组中的字符(不是空格字符的字符),并进一步将其过滤为 not 包括',''.'。当前,您正在打印所有已读取的内容(第一个字符除外)

结果看起来类似于以下代码(我的index.dat的内容是您的问题的正文)。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
    FILE *f = fopen("index.dat","r");
    if (f == NULL)
    {
        perror("index.dat");
        exit(EXIT_FAILURE);
    }

    int ch = fgetc(f);
    while (ch != EOF)
    {
        // skip any leading whitespace
        while (ch != EOF && isspace((unsigned char)ch))
            ch = fgetc(f);

        // on a non-white-space character
        if (ch != EOF)
        {
            while (ch != EOF && !isspace((unsigned char)ch))
            {
                if (ch != ',' && ch != '.')
                    putchar(ch);
                ch = fgetc(f);
            }
            fputc('\n', stdout);
        }
    }

    fclose(f);
    return 0;
}

输出

I
have
a
simple
c
program
that
reads
from
a
file
and
is
supposed
to
print
one
word
per
line
remove
all
punctuations
and
blank
lines
I
am
stuck
at
detecting
and
removing
blank
lines

至少这是您似乎想要实现的目标