2

逐字符读取文本文件并删除点和逗号前面的空格和连字符。禁止使用 string.h 函数! 我试图编写一个删除单个连字符/空格的程序,以为我需要删除所有这些,例如点前的一个、两个或多个空格。作为新手,我不清楚,我想我不完全了解如何使用 while 循环。

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

int main(int argc, char *argv[])
{
    FILE *f1;
    FILE *f2;
    char ch1;
    char ch2;
    char space=0;

    if(argc==1)
    {
        printf("Unknown file\n");
        return 1;
    }

    f1=fopen(argv[1], "r");

    if(!f1)
    {
        printf("Error opening input file\n");
        return 2;
    }

    f2=fopen(argv[2], "w");

    if(!f2)
    {
        printf("Error creating output file\n");
        return 3;
    }

    while((ch1=getc(f1))!=EOF)
    {
        if((ch1==' ')||(ch1=='\n'))
        {
            if((ch2 = getc(f1))=='.')
            {
                putc('.', f2);
            }

            else 
            {
                putc(ch1, f2);
                putc(ch2, f2);
            }
        } 
        else putc(ch1, f2);
    }

    return 0;
}

请给我解释一下!

4

1 回答 1

0

剧透:

#include <stdio.h>

int main(void)
{
int ch;
size_t count;

count = 0; 
while (1)  {
        ch = getc(stdin);
        switch (ch) {
        case '.':
        case ',': count = 0; break;
        case ' ': count++; continue;
        default: for ( ; count; count--) putc(' ', stdout); break;
                }
        if (ch == EOF) break;
        putc(ch, stdout);
        }
return 0;
}
于 2013-01-09T13:23:53.443 回答