请你写一个代码输出在一个字符串里面某个字符串出现的次数,n=1e6,用c++写
时间: 2024-05-03 12:19:53 浏览: 86
以下是用 C 语言写出的代码,可以输出指定字符串在另一个字符串中出现的次数,可以处理长度为 1e6 的字符串:
```c
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000000
int main() {
char str[MAXLEN], sub[MAXLEN];
int n, cnt = 0;
//输入原始字符串和子字符串
printf("请输入原始字符串:");
fgets(str, MAXLEN, stdin);
printf("请输入要查找的子字符串:");
fgets(sub, MAXLEN, stdin);
n = strlen(sub) - 1; //去掉子字符串结尾的回车符
//遍历原始字符串,查找子字符串
for (int i = 0; i < strlen(str) - n + 1; i++) {
if (strncmp(str + i, sub, n) == 0) {
cnt++;
}
}
//输出结果
printf("子字符串在原始字符串中出现的次数为:%d\n", cnt);
return 0;
}
```
说明:
- 使用 fgets 函数可以读入含有空格的字符串,因为 scanf 函数遇到空格就会停止读入;
- MAXLEN 宏定义了字符串的最大长度为 1000000,可以根据需要进行修改;
- 在输入字符串后,需要去掉子字符串结尾的回车符(用 \n 表示),不然程序会将回车符也算作字符串的一部分,导致程序出错;
- 使用 strncmp 函数可以比较两个字符串中的前 n 个字符是否相等,如果相等返回 0,不相等返回非 0 的整数,可以用来判断一个字符串是否包含另一个字符串;
- 字符串的下标从 0 开始,所以在遍历原始字符串时,最后一个能够匹配的子字符串的左端位置是 strlen(str) - n;
阅读全文