关于串的查找和替换(c语言编程)

打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char indata[20000]={0},outdata[20000]={0};
    char find[100] = {0},replace[100] = {0};
    int datalen = 0,nfindpos=0,nreplacepos=0,findlen = 0,replacelen = 0;
    FILE *out = NULL;
    FILE *in = fopen("D:\\in.dat","r");
    if(in==NULL)
        return 0;
    out = fopen("D:\\out.dat","w");
    if(out==NULL)
        return 0;
    datalen = fread(indata,1,2000,in);
    fclose(in);
    scanf("%s",find);
    scanf("%s",replace);
    findlen = strlen(find);
    replacelen = strlen(replace);
    while(nfindpos < datalen - findlen)
    {
        if(memcmp(indata+nfindpos,find,findlen) == 0)
        {
            memcpy(outdata+nreplacepos,replace,replacelen);
            nreplacepos += replacelen;
            nfindpos += findlen;
        }
        else
        {
            outdata[nreplacepos++] = indata[nfindpos++];
        }
    }
    if(nfindpos < datalen)
        memcpy(outdata+nreplacepos,indata+nfindpos,datalen-nfindpos);
    fwrite(outdata,1,nreplacepos,out);
    fclose(out);
    return 0;
}


运行结果及代码如下:
(用临时文件暂存的数据,最后用临时文件替换源文件,为了显示效果,截图的时候没有用临时文件替换源文件)

img

#include <stdio.h>
#include <string.h>


int main()
{
    FILE* fp,*fp2;   //文件指针
    char buf[100]={0}; //缓存每行文本数据
    char old[100],rep[100]; //需要替换的单词 及 需要替换成的内容
    int i;
    int len=0,sz = 0,shift=0;
    printf("请输入需要被替换的单词:");
    scanf("%s",old);
    printf("请输入需要替换成的单词:");
    scanf("%s",rep);

    len = strlen(old); //得到原来单词的长度

    //判断文件是否打开成功
    if (!(fp= fopen("a.txt","r")))
    {
        printf("文件打开失败\n");
        return 0;
    }
    
    fp2 = fopen("a_tmp.txt","w"); //临时文件
    shift = len;
    while(!feof(fp))
    {
        if(fread(buf+len-shift,1,shift,fp) != shift)
            break;
        buf[len] = 0;
        if(strcmp(buf,old)==0)
        {
            fwrite(rep,1,strlen(rep),fp2);
            memset(buf,0,len);
            shift = len;
        }else
        {
            fwrite(buf,1,1,fp2);
            for(i=0;i<len-1;i++)
                buf[i] = buf[i+1];
            buf[len-1] = 0;
            shift = 1;
        }
    }
    fwrite(buf,1,strlen(buf),fp2);
    fclose(fp);
    fclose(fp2);

    remove("a.txt");
    rename("a_tmp.txt","a.txt");
    return 0;
}