问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请帮忙用C语言写一个程序!急!!

发布网友 发布时间:2022-05-27 10:57

我来回答

5个回答

热心网友 时间:2023-10-17 22:23

晚上回去看看吧

=========================
给,已经在VC6.0上编译运行确认:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 100 //暂定文件最大长度为100个char型

char * replace(char *str, char *str1, char *str2, char *strretu)
{
char *str_temp = str;
char *str1_temp = str1;
char *str2_temp = str2;
char *strretu_temp = NULL;

unsigned long char_size = (unsigned long)sizeof(char);
/*计算字符长度*/
unsigned long i,rep_acc = 0;
unsigned long str_len = strlen(str);
unsigned long str1_len = strlen(str1);
unsigned long str2_len = strlen(str2);

/*首先找出Str里有几个地方要被替换的*/
for(; str_temp - str < str_len; )
{
for(i = 0; i < str1_len; i++)
{
if(*str_temp++ != *str1_temp++)
{
str1_temp = str1;
break;
}
else
{
if(i == str1_len - 1)
{
str1_temp = str1;
rep_acc++;
}
}
}
}
str1_temp = str1;
str_temp = str;

/*分配所需内存*/
strretu = strretu_temp = (char *)malloc(((str_len - str1_len * rep_acc) + str2_len * rep_acc + 1) * char_size);
/*替换*/
for(; str_temp - str < str_len; )
{

for(i = 0; i < str1_len; i++)
{
*strretu_temp++ = *str_temp;

if(*str_temp++ != *str1_temp++)
{
str1_temp = str1;
break;
}
else
{

if(i == str1_len - 1)
{
strretu_temp = strretu_temp - str1_len;

for(i = 0; i < str2_len; i++)
{
*strretu_temp++ = *str2_temp++;
}
str2_temp = str2;
str1_temp = str1;
}
}
}
}
*strretu_temp = '\0';
str1_temp = str1;
str_temp = str;
str2_temp = str2;

return(strretu);
}

int main(void)
{
char str[N] = {NULL};
char str1[N] = {NULL};
char str2[N] = {NULL};
char *strretu = NULL;

char ch;
int i=0;
char fliename[20]={NULL};
FILE *p;

printf("\n请输入文件名: \n");
gets(fliename);

if((p=fopen(fliename,"r"))==NULL)
{
printf("\n打开文件失败\n");
getch();

return 0;
}

while((ch=fgetc(p))!=EOF)
{
str[i++]=ch;
}
fclose(p);

printf("\n请输入待查找字符串: \n");
gets(str1);
printf("\n请输入替换字符串: \n");
gets(str2);

strretu = replace(str, str1, str2, strretu);

p=fopen(fliename,"w+");
fputs(strretu, p);
fclose(p);

free(strretu);

printf("替换完成!\n任意键关闭!\n");
getch();
return 0;
}

运行结果:

请输入文件名:
1234.txt

请输入待查找字符串:
1*1

请输入替换字符串:
45 45
替换完成!
任意键关闭!

注意:输入的文件名要带后缀

热心网友 时间:2023-10-17 22:24

去图书馆借本书,这类似的程序多了去了,小改就OK了。重新写一个太麻烦了。。

热心网友 时间:2023-10-17 22:25

main()
{
print("");
………………

}

^_^

热心网友 时间:2023-10-17 22:26

好像要用一个QB的系统吧 我们正在学

热心网友 时间:2023-10-17 22:26

先留个名,我试试看

差不多可以了,要写回原文件还真不厚道- -,否则可以简单很多很多很多的- -~
已知BUG:每次替换后文件末尾会增加一个回车,懒得改了- -
强烈要求加到最高250分- -bb...写那么多真累- -

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

#define MAXLEN 80

struct buf
{
char c;
struct buf *next;
};

void main()
{
FILE *fp;
char t,file_name[MAXLEN],find_s[MAXLEN],replace_s[MAXLEN];
int flag=0,i,count;
struct buf *head,*node;

while(flag==0)
{
printf("请输入源文件名:\n");
i=0;
while((t=getchar())!='\n')
{
file_name[i]=t;
i++;
}
file_name[i]='\0';

if((fp=fopen(file_name,"r"))==NULL)
{
printf("打开文件失败\n");
continue;
}
flag=1;
}

flag=0;
while(flag==0)
{
printf("\n请输入待查找字符串\n");
i=0;
while((t=getchar())!='\n')
{
find_s[i]=t;
i++;
}
find_s[i]='\0';

if(i==0)
{
printf("未输入任何字符");
continue;
}
flag=1;
}

flag=0;
while(flag==0)
{
printf("\n请输入待替换字符串\n");
i=0;
while((t=getchar())!='\n')
{
replace_s[i]=t;
i++;
}
replace_s[i]='\0';

if(i==0)
{
printf("未输入任何字符");
continue;
}
flag=1;
}

head=node=(struct buf *)malloc(sizeof(struct buf));
flag=1;
while(feof(fp)==0)
{
count=0;
fread(&t,1,1,fp);
while(t==find_s[count])
{ //开始匹配
count++;
if(feof(fp)==1)
{
if(count==(int)strlen(find_s))
{ //到文件末尾且恰好匹配时
count=strlen(replace_s);
i=0;
while(i<count)
{
node->c=replace_s[i];
node->next=(struct buf *)malloc(sizeof(struct buf));
node=node->next;
i++;
}
}
else
{ //到文件未但不匹配时
i=0;
while(i<count)
{
node->c=find_s[i];
node->next=(struct buf *)malloc(sizeof(struct buf));
node=node->next;
i++;
}
flag=0;
}
break;
}
fread(&t,1,1,fp);
}
if(flag==0)
break;
if(count==(int)strlen(find_s))
{ //匹配成功
count=strlen(replace_s);
i=0;
while(i<count)
{
node->c=replace_s[i];
node->next=(struct buf *)malloc(sizeof(struct buf));
node=node->next;
i++;
}
fseek(fp,-1,SEEK_CUR);
}
else
{ //匹配失败
if(count==0)
{ //即本次while循环一个字符也不匹配
node->c=t;
node->next=(struct buf *)malloc(sizeof(struct buf));
node=node->next;
}
else
{ //即本次while循环匹配了部分字符
fseek(fp,0-count,SEEK_CUR);
node->c=find_s[0];
node->next=(struct buf *)malloc(sizeof(struct buf));
node=node->next;
}
}
}
node->next=NULL;
node->c='\0'; //注意这里最后一个节点的 node->c 是无效的

//重新写入文件
fclose(fp);
if((fp=fopen(file_name,"w"))==NULL)
{
printf("写入文件失败\n");
exit(1);
}
node=head;
while(node->next!=NULL)
{
fwrite(&node->c,1,1,fp);
node=node->next;
}
fclose(fp);
//释放空间
node=head;
while(head!=NULL)
{
head=head->next;
free(node);
node=head;
}
printf("\n操作完成\n");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑分辨率设置多少合适笔记本电脑分辨率多少最佳 各尺寸笔记本电脑的最佳分辨率 2022年高考480到510分能上山东科技大学吗 朋友借了我一万块钱,现在坐牢了怎么还钱? 天王星和海王星虽然看似一对姊妹星,但还是有区别 ...值得收藏吗?现在分别只都多少钱,照片上有一个铜币的 谁能告诉我这是一枚什么样的铜币,值不值钱? 有谁知道这铜币值不值钱,懂家告诉我一下!谢谢 有谁知道这个铜钱的来历 可以进行异地公积金贷款吗 国网上海市电力公司电动汽车服务分公司怎么样? C语言作业,求高手帮写一下 电力公司汽车用油记入什么科 ? 寸的意思 循环泵能把管道里的空气循环出去吗? C语言帮忙写代码 把电力公司变压器撞坏电力公司扣车违法吗? 中药中的女贞子九蒸九晒具体怎么做,要求在冬至日一天做完的,是做熙春酒的 管道循环泵怎么改变电机转速? 360影视大全 为什么缓存下来的视频还要用数据流量才能看 给水泵为什么要装再循环管? 国内电力机车企业主要有哪些 求帮写一个C语言程序。在线等 如何就可以让孩子遵守家里的以及学校的规矩? 急求会C语言的帮写个简单程序!!! 有种*的小汽车,后备箱很大,通常是电力公司或电信公司啊什么的这些公司开的,叫做什么车,能买到吗? 为什么用360影视大全下载的文件会显示缓存文件已被其他应用卸载 苍龙幻化版本 新开服发布网站 多少啊 如何让孩子懂规矩又有自由 电力公司巡线用什么车好 水泵循环封闭管道水流量怎样计算 锅炉循环系统安装了循环泵管道还用有坡度吗 科龙空调外机停后内机灯全亮什么情况? 电力公司的塔吊车是什么样子的 管道循环泵n和p代表什么? 江苏省电力公司南京电动汽车服务分公司怎么样? 用哪三招,能让孩子产生规则意识,让孩子更听话? 管道循环泵水封漏气会影响流量吗? 国家电网设施砸坏私人汽车,电力公司让个人垫付维修费取车或等电力公司保险赔偿审批后取车,我该怎么办? 我是给电力公司领导开车的突然就让我交车不让我干了。 TD50—18G/2SWHCJ管道循环泵的接线方法 清蒸香菇的做法,清蒸香菇怎么做好吃,清蒸香菇的家常 我想考一个健身教练证,不知道在北京怎么考,要准备写什么? 请问一下,我是电力公司驾驶员,我开的是电力抢险车,我建反了,禁令标志,能不扣 到天津市电力公司城南供电分公司的公交车或地铁怎么走 楷书单字,如何把握结构平衡 “寸”字的造字方法是什么? 我的单反防抖一项写着“不支持”,那买不买is防抖镜头意义不大,即不能使用? 怎么在3D MAX里找倒角多边形 3D MAX放样与倒角剖面有何区别?