#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{
if (argc != 4) /* argc should be 4 for correct execution */
{
/* Print argv[0] assuming it is the program name */
printf("usage: %s filename\n", argv[0]);
}
else
{
// We assume argv[1] is a filename to open
char* wordReplace = argv[1];
char* replaceWord = argv[2];
FILE *file = fopen(argv[3], "r+");
/* fopen returns 0, the NULL pointer, on failure */
if (file == 0)
{
printf("Could not open file\n");
}
else
{
char string[100];
int len = 0;int count = 0;int i = 0;int k = 0;
while ((fscanf(file, "%s", string)) != EOF)
{
len = strlen(string);
count++;
char charray[len+1];
if(count == 1)
{
for (i = 0; i < len; i++)
{
charray[i] = replaceWord[i];
printf("%c\n", charray[i]);
}
}
//printf("%c\n", charray[0]);
printf("%s\n", string);
if(strcmp(string, wordReplace) == 0)
{
for(k = 0; k < strlen(replaceWord); k++)
{
fseek (file, (-(long)len), SEEK_CUR);
fputc(charray[k],file);
//replaceWord++;
}
//strcpy(string, replaceWord);
//fprintf(file,"%s",replaceWord);
//fputs(string, file);
//printf("\n%d\n", len);
}
}
fclose(file);
}
}
printf("\n");
return 0;
}
このコードは最初の単語を正しく置き換えますが、置換単語で上書きしたい単語が複数ある場合や、単語が単語のどこかに正しく表示されない場合は正しく表示されませんそれを変えて、それをRAMゴミ箱などに変えます。もし誰かが私にあなたに感謝の理由を導くことができたら、私は不思議でした。 あなたが4文字の単語があるとしましょう:: fseek (file, (-(long)len), SEEK_CUR);
はfputc(charray[k],file);
が更新され、バック位置0(4-4)になりますが(あなたはかなりの数より多くの問題を持っていない場合)の言葉は同じ長さであると仮定すると、文字列をテキストに置き換えるC言語
ご使用方法のメッセージが必要な使用法と一致していないではありません。 'Usage:%s search replace filename'のようなものでなければなりません。 –
'%s 'に' fscanf() 'を使用すると、結果を出力にエコーするときに、入力ファイルのすべてのスペースを失うことになります。 (OTOH、文字列比較コードを単純化します) 'fseek()'ロジックはちょっと奇妙です。何かを印刷する前に、入ってくる文字列と一致する単語を比較してみてください。両者が等しい場合は、置換文字を出力してください。それ以外の場合は、受信した文字列を出力します。心配する 'fseek()'はありません。一つの 'fseek()'だけが必要です。 –
さて、ファイルのテキストを3番目の単語に変更する必要があります。幸いなことに、変更する単語が同じサイズでなければなりません。 p.s. printステートメントはテストのためだけにあり、他のすべてが動作していることを確認しています。 – thekevshow