定位子串 (C語言)
阿新 • • 發佈:2018-12-11
題目描述
將子串在母串中第一次出現的位置找出來。
圖1:在母串中第pos個位置定位子串的演算法
圖2:從母串中第pos個位置獲得長度為len的子串
輸入描述
若干對字串,每對字串佔一行並用一個空格分開。前一個字串為母串,後者為子串。字串只包含英文字母的大小寫。每個字串不超過98個字元。
輸出描述
輸出子串在母串中首次出現的位置,如果母串中不包含子串則輸出0。每個整數佔一行。
輸入樣例 ACMCLUB ACM DataStructure data domybest my
輸出樣例 1 0 3
提示
提示:
可以使用C語言中的字元陣列來表示SString結構,不過需要注意的是資料從下標1的單元開始儲存。由於C語言中的字串是以最後一個為’\0’來標定字串結尾,同時也沒有儲存字串長度。因而演算法4-3中的Sub[0]=len應當改為Sub[len+1] = ‘\0’;
總結:
C語言中的字串實際上是字元陣列,以’\0’作為字串結尾。而書中演算法描述實際上與C++中的string更為接近。
#include<stdio.h> #include<string.h> int main() { char a[105]; char b[105]; while(~scanf("%s %s", a, b)) { int h1, h2, i, j; h1 = strlen(a); h2 = strlen(b); j = 0; int k = 0; for(i = 0; i < h1; i++) { while(a[i+j] == b[j] && j < h2) { j++; } if(j == h2) { k = 1; printf("%d\n", i+1); break; } else { j = 0; } } if(k == 0) printf("0\n"); } return 0; }