c语言:题目如下,为什么我这样写不对呢?如何改进?谢谢 80

题目:从一段字符串中返回另一段字符串的第一次出现的位置代码:intany(chars1[],chars2[]){inti,j,a,b;for(i=0;s1[i]!='\0... 题目:从一段字符串中返回另一段字符串的第一次出现的位置
代码:int any(char s1[], char s2[])
{
int i,j,a,b;
for (i = 0; s1[i]!='\0' ; i++)
{
for ( j=0;s2[j]!='\0' ; j++)
b=1;
if(s1[i]==s2[j])
{
a=i;
b=0;
}
break;
if(b)
a=-1;
b=1;
break;
}
return a;
}
展开
 我来答
PeriShare
2020-10-30 · 分享PD理论最新研究成果和进展
PeriShare
采纳数:2408 获赞数:36827

向TA提问 私信TA
展开全部

首先:字符串在另外一个字符串中,必须满足长度小于等于另外一个字符串;其次,在比较的时候,i位置和j位置不能并列,而应该把子字符串一个一个像格子一样套在长字符串中,看契合不契合;比较的时候比如s1长字符串,s2是短字符串,那么s1从第i个出发,s2每次都要完整对应到s1字符串的第i到第i+len(s2)-1的这么长的子字符串中,这样一次一次比较,如果完整契合那么之前立下的flag不会变(说明在i位置上),只要一个不契合之前立下的flag变化(说明不在i位置上)。

程序图片

你可以试一试

哥德堡快递
2020-11-01 · TA获得超过1582个赞
知道小有建树答主
回答量:1039
采纳率:68%
帮助的人:376万
展开全部
int any(char s1[], char s2[])
{
int len1=0,len2=0,i,j;
while (s1[len1]) len1++;
while (s2[len2]) len2++;
if (len1>=len2)
{
for (i=0;i<=len1-len2;i++)
{
for (j=0;j<len2;j++) if (s1[i+j]!=s2[j]) break;
if (j==len2) return i;
}
}
return -1;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式