include
using namespace std;
// 函数功能:统计 substr 在 str 中出现的次数
int SubStrNum(char* str, char* substr) {
int count = 0; // 用来记录找到了几次
int i = 0; // 主串的索引
int j; // 子串的索引
// 外层循环:遍历主串 str,直到遇到结束符 '\0'
while (str[i] != '\0') {
// 假设当前位置匹配上了,我们需要一个临时变量 k 来记录当前开始的位置
int k = i;
j = 0;
// 内层循环:检查从 str[i] 开始的一段字符,是否和 substr 完全一样
// 只要字符相等,且子串还没结束,就继续往后比
while (str[k] == substr[j] && substr[j] != '\0') {
k++;
j++;
}
// 如果循环结束了,且 substr[j] 是 '\0',说明子串彻底匹配完了
if (substr[j] == '\0') {
count++; // 找到了!计数加 1
// 注意:这里可以选择 i++ 继续找重叠的,或者 i += j 跳过这一段。
// 通常题目默认是不重叠或者逐个往后找,这里我们简单点,i++ 往后挪一步继续找。
}
i++; // 主串指针后移,继续检查下一个位置
}
return count;
}
int main() {
// 定义两个字符数组,注意大小要足够
cout << "2547102107 杨浩明" << endl;
char str[100];
char substr[50];
cout << "请输入主字符串: ";
cin >> str;
cout << "请输入要查找的子字符串: ";
cin >> substr;
int result = SubStrNum(str, substr);
cout << "子字符串出现的次数是: " << result << endl;
return 0;
}
