0

テキストを読み取り、文字を別の文字に置き換えるプログラムを C で作成する必要があります。私はプログラミングの初心者で、今まで常にfscanf関数を使用していました。形式を知らずにテキスト行を読むにはどうすればよいですか?

ファイルの長さもわかりません...

私の「file.txt」があります:

Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura
esta selva selvaggia e aspra e forte
che nel pensier rinova la paura!
Tant' è amara che poco è più morte;
ma per trattar del ben ch'i' vi trovai,
dirò de l'altre cose ch'i' v'ho scorte.
Io non so ben ridir com' i' v'intrai,
tant' era pien di sonno a quel punto
che la verace via abbandonai.

すべての「m」を「n」に変更し、結果を出力する必要があります。お手伝いありがとう

4

3 に答える 3

3

最大バッファ長を決定し、次のように読み取るだけfgetsです。

FILE *file = fopen(...);
char buffer[256];

fgets(line,256,file);
于 2012-06-21T17:24:49.287 に答える
0
#include <stdio.h>

enum { OLDCH = 'm', NEWCH = 'n' };

int main()
{
    int c;

    while ( (c = getchar()) != EOF ) {
        if( c == OLDCH )
            c = NEWCH;
        putchar(c);
    }

    return 0;
}
于 2012-06-21T18:04:31.497 に答える
0
#include <stdio.h>

char* repchar(char *str, char from, char to){
    if(str != NULL){
        char *p;
        for(p=str;*p;++p){
            if(*p == from)
                *p = to;
        }
    }
    return str;
}

int main(){
    char line[256];
    FILE *fp;
    fp=fopen("file.txt","r");
    //input of one line to char[] by scanf
    //%[^\n] order takes as input a non '\n'
    //%*[\n] ignore input '\n'
    while(fscanf(fp, "%[^\n]%*[\n]", line)==1){
        printf("%s\n", repchar(line, 'm', 'n'));
    }
    fclose(fp);
}
于 2012-06-21T23:21:43.470 に答える