用c语言编写程序,从盘输入2个字符串,计算字符串 str1 中字符串 str2 出现的次数。要求:不使用字符串比较库函数,直接使用指针进行字符比较。 部分程序代码如下: #include stdio.h> main() (char strl[81],str2[20],*pl,*p2; int sum=0; printf("please input two strings\n"); scanf("%s%s",strl,str2); pl=strl; p2=str2;... printf("&d",sum); 请在以上程序的“…”处添加语句来完成整个程序的编写,然后调试程序使其能按题目要求输出正确结果。
时间: 2024-03-15 21:46:11 浏览: 169
可以使用字符串匹配算法来实现这个问题,比如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[81], str2[20], *pl, *p2;
int sum = 0;
printf("请输入两个字符串:");
scanf("%s%s", str1, str2);
pl = str1;
p2 = str2;
while (*pl != '\0') {
int pos = kmp(pl, p2);
if (pos != -1) {
sum++;
pl += pos + 1;
} else {
break;
}
}
printf("字符串 str2 在字符串 str1 中出现了 %d 次。\n", sum);
return 0;
}
```
这段代码首先定义了两个字符串 `str1` 和 `str2`,然后读入这两个字符串。接着使用KMP算法查找字符串 `str2` 在字符串 `str1` 中出现的位置,如果找到了,就将计数器加一,并继续查找下一个位置。最后输出计数器的值,即为字符串 `str2` 在字符串 `str1` 中出现的次数。
阅读全文