C++指针与字符的处理

来源:百度知道 编辑:UC知道 时间:2024/06/28 03:26:00
编写函数int index(char *s,char *t),返回字符串t在字符串s中出现的最左边的位置。如果在s中没有与t匹配的字串,就返回-1

我编了程序如下,可是这个程序只会返回-1,小弟实在看不出是哪里的错,还请高手帮忙看下,小弟先谢了
#include<iostream>
#include<cstring>
using namespace std;
int index(char *s,char *t)
{
int a;
int flag=0,n=0;
for(int i=0;(*s)!='\o'||(*t)!='\o';i++)
{
a=((*s)==(*t));
if(a==0)
{
if(flag==0)
{
s++;
n++;
goto hp;
}
if(flag==1)
{
flag=0;
n=-1;
goto eh;
}
}
if(a!=0)
{
s++;
t++;
flag=1;
}
hp:;
}
if(flag==1) return(n);
else eh:return(n);
}
int main()
{
char a[50],b[50],*p1,*p2;
p1=a;p2=b;
gets(p1);
gets(p2);
p1=a;p2=b;
cout<<index(p1,p2)<<endl;
return 0;
}

此下为我对你的程序的修改,仅是在你的基础上。程序虽能解决问题,但是你的算法过于繁琐,有时间可以进一步优化了。
#include<iostream>
#include<cstring>
using namespace std;
int index(char *s,char *t)
{
int a,i;
int flag=0,n=0;
for(i=0;(*s)!='\0'||(*t)!='\0';i++)/*注意用||会使测试用例覆盖不全,所以我不得以增加了部分语句进行覆盖测试*//*还有你的字符串判断结束符'\0'非'\o'*/
{
a=((*s)==(*t));
if(a==0)
{
if(flag==0)
{
s++;
n++;
goto hp;
}
if(flag==1)
{
if((*s)!='\0'&&(*t)=='\0')/*因为是用||进行判断,所以防止母串结尾(*s)!='\0'与字串开始相匹配,但此时字串并未结束的情况(*t)=='\0'确认字串已经结束,否则跳跃的匹配也可能成立,如abcde和ce*/
return n;/*以上就是修改的地方*/
else
{
flag=0;
n=-1;
goto eh;
}
/* flag=0;
n=-1;/*匹配结束时你修改了n值,所以无论怎样返回的只能是这个值*/
goto eh;*/
}
}
if(a!=0)
{
s++;
t++;