用C替换文件的特定文本

时间:2017-11-25 16:03:34

标签: c string file

好吧,基本上我要做的就是将文本文件的所有数字更改为美元符号,我知道如何扫描特定字符但我仍然坚持如何用美元符号替换该特定字符。我不想使用fseek或任何库命令,我该如何继续,为什么我的代码不工作?

#include<stdio.h>
main()
{
FILE* fptr;
char filename[50];
char string[100];
int i;
printf("Enter the name of the file to be opened: ");
scanf("%s",filename);
fptr=fopen(filename,"w");
if(fptr==NULL)
{
    printf("Error occurred, try again.");
    return 0;
}
fgets(string,"%s",fptr);
do
{
    if(string[i]>='1' && string[i]<='9')
    {
        string[i]='$';
    }
}
while(i!=100);
fclose(fptr);
}

1 个答案:

答案 0 :(得分:0)

乍一看基本上有两种方法,第一种是使用fseek(),第二种是完整地读取文件并将字符替换为您的标准,最后一次写入。您可以根据需要选择其中一种方法。对于大文件,您应该更喜欢前者,对于小文件,您可以更喜欢后者。

这是前者的示例代码:

#include <stdio.h>

int main() {
    // Open the file
    FILE *fptr = fopen("input.txt", "r+");
    if (!fptr) {
        printf("Error occurred, try again.");
        return -1;
    }
    int c;
    // Iterate through all characters in a file
    while ((c = getc(fptr)) != EOF) {
        // Check if this current character is a digit?
        if (c >= '0' && c <= '9') {
            // Go one character back
            if (fseek(fptr, -1, SEEK_CUR) != 0) {
                fprintf(stderr, "Error while going one char back\n");
                return -1;
            }
            // Replace the character with a '$'
            if (fputc('$', fptr) == EOF) {
                fprintf(stderr, "Error while trying to replace\n");
                return -1;
            }
        }
    }
    // Flush the changes to the disk
    if (fflush(fptr) != 0) {
        fprintf(stderr, "Error while flushing to disk\n");
        return -1;
    }
    // Close the file
    fclose(fptr);
    return 0;
}