C语言如何将一个txt文件内的指定字符串删除..在线等

来源:百度知道 编辑:UC知道 时间:2024/05/26 10:15:15
我在VC++环境下编写一个程序~
其中要在一个txt文件中找出一个指定的字符串并删除,格式如下(格式化的):
about,do,esteblish,baby,
删除一个单词do后,新的就是about,esteblish,baby,(还要保存到原文件中)
我看了网上说的一些先都读入内存,再找出删除的字符串,跳过,然后将余下的都写入文件,可是我事先不知道文件内的字符个数,怎么申请数组?
请说的尽可能详细些....

首先,打开一个tmp.txt的文件保存结果文件
FILE* out=fopen("tmp.txt","w");
FILE* in=fopen("原文件.txt","r");

循环采用fgets从in中读入字符串,fgets可以指定读入的最大字符串长度,因此可以一部分一部分地读,处理到文件结束为止
然后,因为你是要对完整的单词进行处理,所以fgets完之后再继续fgetc一个一个的字母,直到读到一个','再结束,这样就可以在内存中读到一部分的完整单词

char str[1000]; //开个1000长度的字符串数组
int len;
while (fgets(str,900,in)!=NULL) //读900个,留点空间后面可以读入直完整单词
{
len=strlen(str);
if (str[len-1]=='\n')
{
str[len-1]='\0'; //fgets还有个特点,碰到回车会结束,所以如果碰到回车,就会把结尾的回车也读进去,要去掉
len--;
}
while (str[len-1]!=',') //把最后的单词读完整
{
str[len]=fgetc(in);
if (str[len]==EOF) break;
len++;
}
str[len]='\0';
//接下来对str中的单词进行处理啦,这里自己写,逐个地读,判断是不是要删除的那个,不是的话,就写入out文件中
}
//最后,删除原文件,把tmp.txt代替原文件
fclose(in);
fclose(out);
remove("原文件.txt");
rename("tmp.txt","原文件.txt");