c语言文件中字符串的查找与替换问题

我要写个程序,完成以下功能:1.打开文件,找到字符串“gao1350”,将gao1350前面80位都替换成0,然后保存2.这样操作能否做成修改文件,不用做成需要新建一个文... 我要写个程序,完成以下功能:
1.打开文件,找到字符串“gao1350”,将gao1350前面80位都替换成0,然后保存
2.这样操作能否做成修改文件,不用做成需要新建一个文件呢?
3.文件体积较大,通常都在500兆以上,可否实现?
4.能写出代码,追加100分!
感谢!
代码超过长度,发不上来,
http://hi.baidu.com/gao1350/blog
代码运行没有异常,只是没有发现字符串,而且生成文件为0字节,请帮忙修改代码!
能改好代码者,帖上留名,追加100分,谢谢。
我的QQ:175537446
展开
 我来答
希声和寡
2009-01-05 · TA获得超过2.6万个赞
知道大有可为答主
回答量:6437
采纳率:0%
帮助的人:3376万
展开全部
你好,你的代码已经改好了,问题不大,都是一些细节。
已经编译运行确认:)

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

int Count=0;

int findNum(char *str)
{
int i=0,t1=0;
FILE *p;
char ch;
if((p=fopen("image.gl","rb"))==NULL)
{
printf("\n打开文件失败\n");
exit(4);
}
while((ch=fgetc(p))!=EOF)
{
if(ch==str[t1])
t1++;
else
t1=0;
if(t1>=strlen(str))
{
printf("找到字符串%s位置为%d\n",str,i-strlen(str)+1);
Count = i-strlen(str)+1;
i=1;
break;
}
i++;
}
fclose(p);

if(!i) return 0;
return i;
}

int main(void)
{
FILE *in,*out;
char *str1="1234567";
char *str2="abcdef";
int i=0,j=0,t1=0,t2=0;
char ch;
if((t1=findNum(str1))==0)
{
printf("没有找到字符串%s\n请按任意键退出\n",str1);
return -1;
}
if((t2=findNum(str2))==0)
{
printf("没有找到字符串%s\n请按任意键退出\n",str2);
return -2;
}

if((in=fopen("image.gl","rb"))==NULL){
printf("\n打开文件失败\n");
exit(2);
}
if((out=fopen("image_new.gl","wb"))==NULL){
printf("\n创建新文件失败\n");
exit(3);
}

i=0;

/* start copy */
while((ch=getc(in))!=EOF)
{
if(t1||t2)
{
if(Count<=80)
{
if(i<=Count) fputc('0',out);
else fputc(ch,out);
}
else
{
if((i>=(Count-80))&&(i<=Count)) fputc('0',out);
else fputc(ch,out);
}
i++;
}
}
fclose(in);
fclose(out);
printf("替换完成!\n任意键关闭!\n");
getch();
}

如果觉得还行,请加分哦:)
高金山
2009-01-04 · TA获得超过1万个赞
知道大有可为答主
回答量:4101
采纳率:0%
帮助的人:1651万
展开全部
你要写个程序,那就写吧,我支持你

2.可以只修改文件,而不重新创建。
3.500兆以上,也可以实现,没关系的
4.你自己能写出代码的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花式码农
2009-01-04 · TA获得超过1.7万个赞
知道大有可为答主
回答量:4894
采纳率:0%
帮助的人:4691万
展开全部
只要长度相同就不需要重新创建文件。
如果不相同的话就需要创建,这样效率更高一些。

500G都没问题,呵呵。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
giegie1985
2009-01-05 · TA获得超过192个赞
知道答主
回答量:162
采纳率:0%
帮助的人:159万
展开全部
楼主,这种算法不够缜密,
如果文件是:
11123aa112aa
你要查找的是112的话,就会漏了前面的一个112了。

字符串匹配建议采用 KMP算法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伊·梵beec
2009-01-04 · TA获得超过2158个赞
知道大有可为答主
回答量:1897
采纳率:0%
帮助的人:1360万
展开全部
楼上的说说怎么实现啊,用什么函数?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式