题目描述
设s、t为两个字符串,分别放在两个一维数组中,m、n分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出0。
输入
输入 长度m和n,字符串s和t
输出
子串所在的位置
样例输入
5 3
adsff
dsf
样例输出
2
提示
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MaxSize=100;
typedef struct
{
char data[MaxSize];
int length;
} SqString;
void StrAssign(SqString &s,char cstr[])
{
int i;
for(i=0; cstr[i]!='\0'; ++i)
s.data[i]=cstr[i];
s.length=i;
}
int index(SqString &s,SqString &t)
{
int i=0,j=0;
while (i<s.length&&j<t.length)
{
if (s.data[i]==t.data[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if (j>=t.length)
return (i-t.length);
else
return -1;
}
int main()
{
int m,n;
SqString str1,str2;
cin>>m>>n;
char c1[100],c2[100];
for (int i=0;i<m;i++)
cin>>c1[i];
getchar();
for (int i=0;i<n;i++)
cin>>c2[i];
StrAssign(str1,c1);
StrAssign(str2,c2);
cout<<index(str1,str2)+1<<endl;
}