# 计算子串在母串中出现次数的C语言实现 ```c #include <stdio.h> #include <string.h> int countSubstring(const char *str, const char *substr) { int count = 0; int substr_len = strlen(substr); // 空子串直接返回0 if (substr_len == 0) { return 0; } // 遍历母串 for (int i = 0; str[i] != '\0'; ) { // 检查当前位置是否匹配子串 int match = 1; for (int j = 0; j < substr_len; j++) { if (str[i + j] != substr[j]) { match = 0; break; } } // 如果匹配成功,增加计数并跳过子串长度 if (match) { count++; i += substr_len; } else { i++; } } return count; } int main() { char str[100], substr[100]; printf("请输入母串: "); fgets(str, sizeof(str), stdin); str[strcspn(str, "\n")] = '\0'; // 去除换行符 printf("请输入子串: "); fgets(substr, sizeof(substr), stdin); substr[strcspn(substr, "\n")] = '\0'; // 去除换行符 int occurrences = countSubstring(str, substr); printf("子串出现的次数: %d\n", occurrences); return 0; } ``` ## 代码说明 1. `countSubstring`函数接收母串和子串指针,返回子串出现次数 2. 使用双重循环检查每个可能的匹配位置 3. 外层循环遍历母串,内层循环检查当前位置是否匹配子串 4. 匹配成功时计数增加并跳过子串长度,不匹配时只前进一个字符 5. 主函数处理输入输出,使用`fgets`安全读取字符串 ## 注意事项 1. 该算法时间复杂度为O(n*m),其中n是母串长度,m是子串长度 2. 对于空子串的特殊情况直接返回0 3. 该实现区分大小写,如需不区分大小写需要修改比较逻辑 [2025-03-29 15:10:17 | AI写代码神器 | 515点数解答]