为了账号安全,请及时绑定邮箱和手机立即绑定

请问想编写一个函数strindex(s,t)它返回字符串t在s中最右边出现的位置?

请问想编写一个函数strindex(s,t)它返回字符串t在s中最右边出现的位置?

幕布斯6054654 2022-02-24 23:15:49
例如字符串“ab”在字符串“abcdefabed”中左右边出现的位置应该是7 我编写的程序如下#include<stdio.h>int strindex(char a[],char b []){char *p=a,*q=b;int i=0,j=0;while (*p!='\0'){p++;i++;}p--;//后退一步,从终止符号回到最右边的元素while(*p!=*q){p--;j++;if(p<0){return(-1);break;}}return(i-j);}void main(){char a[100],b[100];printf("请输入字符串s:\n");gets(a);printf("请输入字符串t:\n");gets(b);int s=strindex(a,b);if(s<=-1)printf("sorry,字符串\"%s\"中未找到字符串\"%s\"\n",a,b);elseprintf("字符串\"%s\"在字符串\"%s\"中最右边出现的位置应该是:%d\n",b,a,s);}可在输入aabbccaaddcc和cc作比较时就会算错,我知道问题是出在指针上面了,*p与*q的比较只限数组的首元素,但是要怎么改啊??
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

int strindex(char a[],char b [])
{
char *p=a,*q=b,*t;
int i=0,j=0,len=0;
while (*p!='\0')
{p++;i++;}
while (*q!='\0')
{q++;len++;}
p=a+i-len;//将p定位到最后一个长度为len的子串位置
while(p>=a)
{
t=p;
j=0;
q=b;
while(*t==*q)
{
if(++j>=len)
return (int)(p-a)+1;
t++;
q++;
}
}
return -1;
}



查看完整回答
反对 回复 2022-02-27
  • 1 回答
  • 0 关注
  • 477 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信