这段代码是网上找的,对于自己学习很有帮助
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000 /* 设定文件最大字符个数不超过10000,可更改 */
#define SHOW 1
void SetIP(char* filename,char* srcString,char* destString)
{
int i=0,j,k=0,m=0,pos=0,max,len1,len2;
char Array[N],Temp[N];
FILE *fp;
len1=strlen(srcString);
len2=strlen(destString);
if ((fp=fopen(filename,"r"))==NULL)/*设定文件位于当前目录下,可更改为绝对路径*/
{ perror("open error");
exit(1);
}
while(!feof(fp))
Array[i++]=fgetc(fp);
fclose(fp);
max=i-1;/* 函数feof()最后会读两次,所以必须减1 */
for(i=0;i<max - len1;i++)
{
for(j=0;j<len1&&(Array[i+j]==srcString[j]);j++); //关键的理解在这里,对于for循环还不够理解,如果不满足中间俩个相与的条件,是不会执行j++的,当 j == len1时,证明已经找到了需要修改字符串 if(j != len1) 就是在判断i的位置,它的下一个就是要修改的字符。通过这样做,准确知道了修改字符串的位置。
if(j!=len1)
continue;/* 不相等则i加1进行下一次外循环 */
else
{
for(k=0;k<i-pos;k++)/* pos记录开始复制的位置 */
Temp[m++]=Array[pos+k];
pos=i+len1;
for(k=0;k<len2;k++)/* 字符串替换 */
Temp[m++]=destString[k];
}
}
for(k=pos;k<max;k++)/* 复制剩余字符 */
Temp[m++]=Array[k];
max=m;/* max是替换后文件的字符总数 */
fp=fopen(filename,"w");
printf("\n\nThe results are:\n\n");
for(j=0;j<max;j++)
{
putchar(Temp[j]); /* 结果显示到屏幕 */
fputc(Temp[j],fp); /* 同时结果写入到当前目录下的新文件001.txt中 */
}
fclose(fp);
}
void ShowFileContent(char* filename)
{
char ch;
FILE*fp = fopen(filename,"r");
<span style="white-space:pre"> </span>ch = fgetc(fp);
while(!feof(fp))
{
putchar(ch);
<span style="white-space:pre"> </span>ch = fgetc(fp);
}
fclose(fp);
}
int main()
{
char filename[30] = "\0";
char src[30] = "\0";
char dest[30] = "\0";
printf("input filename");
gets(filename);
ShowFileContent(filename);
printf("input src string!\n");
scanf("%s",src);
printf("input dest string!\n");
fflush(stdin);
scanf("%s",dest);
SetIP(filename,src,dest);
return 0;
}
要自己想办法再写一种方法!
修改文件指定字符串
最新推荐文章于 2019-07-09 20:09:50 发布