串的操作之子串定位
阿新 • • 發佈:2018-11-26
求子串位置這個比較簡單 有一個重要的點就是確定迴圈次數的問題 長串的長度是L1,子串的長度是L2,那麼從頭開始匹配的話就要L1-L2+1次 從位置n開始匹配的話,就要匹配L1+L2+1-n次
下面附上程式碼
#include<stdio.h> #include<string.h> int length(char s[]) { int i = 0; for(i=0;s[i]!='\0';i++){ }; return(i); } int find(int n,char s1[],char s2[]) { int i=n,j,k=0; int L1 = length(s1); //printf("------%d-----\n",L1); int L2 = length(s2); //printf("-------%d------\n",L2); while(i<L1-L2+1) { if(s1[i] == s2[k]) { for(j=i+1;j<i+L2-1;j++) if(s1[j] != s2[++k]) { k=0;break; } else return i-n; } i++; } } int main() { int pos; int n; char str1[50]="abcdefghij"; char str2[10]="def"; printf("請輸入從第幾個位置開始匹配???:\n"); scanf("%d",&n); pos = find(n,str1,str2); printf("----%d------",pos); return 0; }