1. 程式人生 > >定位子串 (C語言)

定位子串 (C語言)

題目描述

將子串在母串中第一次出現的位置找出來。

圖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;

}