2

テキスト ファイルを 1 文字ずつ読み取り、ドットとコンマの前のスペースとハイフネーションを削除します。string.h 関数の使用は禁止されています! 単一のハイフン/スペースを削除するプログラムを作成しようとしましたが、それらをすべて削除する必要があると考えました。たとえば、ドットの前にある 1 つ、2 つ、または複数のスペースです。初心者として、それは私には明確ではありません.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 に答える