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 }

 

posted @ 2016-07-14 21:41  Memoryヾノ战心  阅读(786)  评论(0编辑  收藏  举报