C語言字串處理的問題

用C寫一個函式 int string_search(char str[], char pat[]),它能計算出子字串 pat 在字串str中的位置。例如:假設 str="I will pass this exam."且pat="pass",則函式string_search(str, pat)回傳7

Update:

可否註解一下

2 Answers

Rating
  • 阿風
    Lv 5
    9 years ago
    Favorite Answer

    參考看看

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    int string_search(char str[],char pat[])

    {

    int i,t,j=0;

    for(i = 0; str[i] != '\0'; i++)

    {

    if(str[i] == pat[j])

    t=i,j++;

    else

    j = 0;

    if(j == strlen(pat))

    break;

    }

    if(j == strlen(pat))

    return t - strlen(pat)+1;

    else

    return -1;

    }

    int main()

    {

    char input_str[50];

    char input_pat[50];

    int ans;

    printf("str : ");

    gets(input_str);

    printf("pat : ");

    gets(input_pat);

    ans = string_search(input_str,input_pat);

    if(ans == -1)

    goto end;

    printf("ans : %d\n",ans);

    end:

    system("pause");

    return 0;

    }

    2012-01-19 13:32:06 補充:

    哪個地方不懂提出一下

    我比較好解釋

    2012-01-19 13:39:19 補充:

    我的簡單說 就只是單純的比對而已

    例如

    str : I will pass this exam

    pat: pass

    用strlen() 得知pat 長度為4

    也就是說從str[0] ~ 空字元('\\0')止

    如果有連續4個一樣的話 就傳回4

    要是沒有 傳回-1 做結束

    如果比對有一樣 可是沒有連續的話

    重新計算 歸0

    還有問題在發問

    Source(s): 自己
  • 9 years ago

    #include <stdio.h>

    #include <string.h>

    #include <conio.h>

    int string_search(char str[] , char pat[]){

    int i;

    int len1 = strlen(str),len2 = strlen(pat);

    int index = -1;

    for (i=0 ; i<=len1 - len2 ; i++){

    if(!strncmp(str+i , pat , len2)){

    index = i;

    break;

    }

    }

    return index;

    }

    int main(){

    int getIdx;

    getIdx = string_search("I will pass this exam." ,

    "pass");

    printf("Return value : %d",getIdx);

    system("pause");

    }

    2012-01-16 13:23:22 補充:

    http://pastebin.com/p3b5dkq9

    函數的註解在這裡 ↑

Still have questions? Get your answers by asking now.