用c语言编写程序,从键盘输入2个字 符串,计算字符串 str1 中字符串 str2 出现的次数。要求:不使用 字符串比较库函数,直接使用指针进行字符比较。
时间: 2024-03-15 14:46:05 浏览: 73
C语言编程-编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数;
5星 · 资源好评率100%
可以使用字符串匹配算法来实现这个问题,比如KMP算法。
下面是使用KMP算法的C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void get_next(char *p, int *next) {
int i = 0, j = -1;
next[0] = -1;
while (p[i] != '\0') {
if (j == -1 || p[i] == p[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
int kmp(char *s, char *p) {
int slen = strlen(s);
int plen = strlen(p);
int i = 0, j = 0;
int *next = (int*)malloc(sizeof(int) * plen);
get_next(p, next);
while (i < slen && j < plen) {
if (j == -1 || s[i] == p[j]) {
i++;
j++;
} else {
j = next[j];
}
}
free(next);
if (j == plen) {
return i - j;
} else {
return -1;
}
}
int main() {
char str1[100], str2[100];
printf("请输入字符串 str1:");
scanf("%s", str1);
printf("请输入字符串 str2:");
scanf("%s", str2);
int count = 0;
int pos = kmp(str1, str2);
while (pos != -1) {
count++;
pos = kmp(str1 + pos + 1, str2);
}
printf("字符串 str2 在字符串 str1 中出现了 %d 次。\n", count);
return 0;
}
```
这段代码首先定义了两个字符串 `str1` 和 `str2`,然后读入这两个字符串。接着使用KMP算法查找字符串 `str2` 在字符串 `str1` 中出现的位置,如果找到了,就将计数器加一,并继续查找下一个位置。最后输出计数器的值,即为字符串 `str2` 在字符串 `str1` 中出现的次数。
阅读全文