帮忙改程序...输入两个字符串s1和s2,在s1中删除任何s2中有的字符。

例如,s1:“abc123ad”,s2:“a1”,则输出“bc23d”。我是这么编的#include"stdio.h"#include"string.h"main(){i... 例如,s1:“abc123ad”,s2:“a1”,则输出“bc23d”。我是这么编的
#include"stdio.h"
#include"string.h"
main()
{int i,j,p;
char s1[80],s2[80];
gets(s1);
gets(s2);
for(i=0;i<strlen(s1);i++)
for(j=0;j<strlen(s2);j++)
if(s2[j]==s1[i])
for(p=i;p<strlen(s1);p++)
s1[p]=s1[p+1];
puts(s1);
}

但我测试输入aq33s
a3时
输出qs3,即s1有两个一样的连在一起并且s2中有这个字符就不行,怎么改啊?谢谢各位了
展开
 我来答
光明武哉5602
2011-05-29 · TA获得超过5.4万个赞
知道大有可为答主
回答量:3.7万
采纳率:0%
帮助的人:2516万
展开全部
原因在于你当查找到3时,你要将S1中的这个3删除,而你删除后又重新对数组进行赋值,但是i的值继续往后加1,这就造成了你把下一个3这个位置给冒过了,根本没比较
解决方法:
你不要每次当s2[j]==s1[i]时就对数组S1进行重新赋值,最简单的解决方法是你再申请一个数组S3,当s2[j]不等于s1[i]时就将S1[i]放进S3数组
百度网友428ddaa
2011-05-29
知道答主
回答量:22
采纳率:0%
帮助的人:5.5万
展开全部
#include"stdio.h"
#include"string.h"
main()
{int i,j,p;
char s1[80],s2[80];
gets(s1);
gets(s2);
for(i=0;i<strlen(s1);i++)
for(j=0;j<strlen(s2);j++)
if(s2[j]==s1[i])
for(p=i;p<strlen(s1);p++)
{ s1[p]=s1[p+1];
puts(s1);}
puts(s1);
}
输出结果为:
qq33s
q333s
q333s
q33ss
q33s
q33s
q3ss
q3s
q3s
现在应该看得出那里出问题了,建议用新数组存放字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风花鸟庭月
2022-10-29
知道答主
回答量:1
采纳率:0%
帮助的人:291
展开全部
再执行完s1[p]=s1[p+1]后直接用goto回到最开始的循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式