输入字符串str、sub,查找sub在str中首次出现的位置(下标)。
例如 str="123aba3abc",sub="3ab",sub在str中首次出现的下标为2, sub、str长度不超过50。
输入格式:
输入包括两行,依次是字符串str,sub。
输出格式:
sub在str中首次出现的位置(下标)。如果sub不在str中输出"NO"。
输入样例:
123aba3abc
3ab
输出样例:
2
#include<stdio.h>
#include<string.h>
int main (void)
{
char str[50],sub[50];
int i,j,k,flag=-1;
gets(str);
gets(sub);
//首先判断子串有没有超过主串
//超过了就没必要再进行下去了
if(strlen(str)<strlen(sub))
{
printf("NO");
return 0;
}
//不超过的情况
else
{
for(i=0;i<strlen(str);i++)
{
j=0;
//当找到了第一个字符时
if(str[i]==sub[j])
{
//看主串剩下的字符有没有比子串长
//比如 主:abcd 子:cde
//很显然 现在主串i是2 只剩下俩字符了(cd)
//然而子串长度为3 很显然 已经不够了 所以可以直接输出NO
if(strlen(sub)>strlen(str)-i)
{
printf("NO");
return 0;
}
//当长度够的时候
else
{
//进行一个一个字符比对
k=i;
while(str[k]==sub[j] && j<strlen(sub))
{
k++;
j++;
}
}
//全部找完之后 如果sub的下标是最后一个(也就是说sub的while)
//没有跳出循环 也就是找到了
//只要求最开始的那个子串下标 所以找到了输出结束就行
if(j==strlen(sub))
{
printf("%d",i);
return 0;
}
}
}
}
//从头到尾都没找到的情况
if(flag==-1)
{
printf("NO");
}
return 0;
}