![](https://img-blog.csdnimg.cn/img_convert/f9b77dcb49cb2fe076a4d2f32ab41a38.png)
本题需要我们判断字符串t是否为字符串s的字串,并输出开头位置。有以下需要注意的点:
利用循环进行s与t之间的比较找到相同的字母,并将他们储存在数组中,不能直接输出,可能会存在个别字母不同的情况,需后期比对检测。
在此代码中result不能设置成0,以防有些测试样例最开始就相同,result本就该输出0,但在代码输出部分写if(result!=0)就会发生冲突。
代码写的复杂,还需优化,完整代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
string t;
int place[10000];
for(int i=0;i<10000;i++)
{
place[i]=0;//初始化,以防干扰
}
cin>>s;
cin>>t;
int size=s.size();
int length=t.length();
int i=0;
int k=0;
int result=-2;//注意不可以初始化为0
for(int j=0;j<size;j++)//s
{
if(t[i]==s[j])
{
place[k]=j;
i++;k++;
}
else{place[k]=-1;k++;continue;}
}
for(int n=0;n<10000;n++)
{
if(place[n]!=-1)
{
for(int p=n;p<length+n;p++)//只比对t的length+开始位置n
{
if(place[p]!=-1)
{
continue;
}
else{n++;break;}//出现有部分不同也不能成为字串
}
result=place[n];break;///检查完毕
}
}
if(result!=-2){cout<<result;}
else{cout<<"-1";}
}