標籤:
題目描述 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 }
CODE[VS]-尋找子串位置-字串處理-天梯青銅