CODE[VS]-寻找子串位置-字符串处理-天梯青铜
题目描述 Description
给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。
输入描述 Input Description
仅一行包含两个字符串a和b
输出描述 Output Description
仅一行一个整数
样例输入 Sample Input
abcd bc
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
字符串的长度均不超过100
Pascal用户请注意:两个字符串之间可能包含多个空格
思路:因为它是用一行来输入两个字符串,所以必须得要把字符串拆分,我的思路是用一个字符串先存储整个串,再拆分成两个(这个很麻烦,部分聪明的童鞋已经想到边输入边存,这也是蛮好的),然后将子串中的第一个字母提出来,循环搜索字符串里面有没有这个字母,有的话判断这个字母后面的所有字母是不是与字符串中的一一对应,用一个ans来记录相同的字母数量,最后判断ans是否等于子串的长度(即子串与字符串中的一小段完全匹配),就可以输出了
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 char a[101],x[101],y[101]; 6 int len,i,j,o=0; 7 int ans=0; 8 gets(a); 9 len=strlen(a); 10 for(i=0;i<len;i++)//拆分存入字符串 11 { 12 if(a[i]!=' ') 13 { 14 x[i]=a[i]; 15 } 16 else 17 { 18 x[i]='\0'; 19 break; 20 } 21 } 22 for(j=i;j<len;j++)//拆分存入子串 23 { 24 if(a[j]!=' ') 25 { 26 y[o]=a[j]; 27 o++; 28 } 29 } 30 y[o]='\0';//末尾加上结束 31 for(i=0;i<strlen(x);i++) 32 { 33 if(x[i]==y[0])//用第一个字母来找,如果匹配,判断后面的字母 34 { 35 for(j=0;j<strlen(y);j++) 36 { 37 if(x[i+j]==y[j])//如果后面的字母与字符串匹配,ans++ 38 { 39 ans++; 40 } 41 else //如果遇到一个不匹配的,结束,继续找 42 { 43 break; 44 } 45 if(ans==strlen(y))//判断子串是否完全符合字符串中的一段(即子串已经全部搜索完,就是正确答案) 46 { 47 printf("%d\n",i+1);//输出子串第一个字母在字符串中的位置 48 return 0; 49 } 50 } 51 } 52 } 53 return 0; 54 }
我不怕千万人阻挡,只怕自己投降…