實現 int fun(char *s1, char *s2),統計 s2 在 s1 中非重疊出現次數,main 函數處理輸入輸出,無匹配輸出 No find。
#include
#include
int fun(char *s1, char *s2) {
int i, j, len1 = strlen(s1), len2 = strlen(s2), n = 0;
for (i = 0; i <= len1 - len2; i++) {
for (j = 0; j < len2; j++) {
if (*(s1 + i + j) != *(s2 + j)) break;
}
if (j == len2) {
i += j - 1; // 跳過已匹配長度
n++;
}
}
return n;
}
int main() {
char a[80], b[80];
int n;
printf("Please input the first string: ");
gets(a); // 注意:gets 不安全,教學用;實際用 fgets
printf("Please input the second string: ");
gets(b);
n = fun(a, b);
if (n == 0) printf("No find\n");
else printf("n=%d\n", n);
return 0;
}
輸入:
abaaAabcaabbabca
ab
輸出: n=4
輸入:
abaaAabcaabbabca
abd
輸出: No find
s2 為空串:len2=0,外層循環條件 i <= len1 可能導致無限循環,建議開頭判斷 if (len2 == 0) return 0;。s1 為空串:len1=0,外層不進入,返回 0。gets 易溢出,生產環境必須用 fgets。時間 O(n×m),空間 O(1)。n=主串長,m=子串長。