C语言编程:(1)从键盘输入2个字符串,计算字符串strl中字符串str2出现的次数。要求:不使用 字符事比较库函数,直接使用指针进行字符比较。 部分程序代码如下:Hincmude Kstalo.hs main() Lchar str1[811,str21201,*p1,-p2; int sum=0; printf("please input two stringstn"), scanf("%s%s",strl,str2); pl=strl; p2=str2; printf("%d",sum); 请在以上程序的“…”处添加语句来完成整个程序的编写,然后调试程序使其能按题目 要求输出正确结果。
时间: 2024-03-24 12:39:47 浏览: 42
可以使用指针循环遍历字符串,逐个字符进行比较,如果相同则继续比较下一个字符。如果比较完整个str2,发现其中的字符都与str1中的对应位置相同,则表示str2在str1中出现了一次,计数器加1。最后输出计数器的值即可。
下面是完整的程序代码:
```c
#include <stdio.h>
int main() {
char str1[81], str2[21], *p1, *p2;
int sum = 0;
printf("please input two strings:\n");
scanf("%s%s", str1, str2);
p1 = str1;
p2 = str2;
while (*p1 != '\0') { // 循环遍历str1中的每个字符
if (*p1 == *p2) { // 如果当前字符相等,则继续比较下一个字符
p1++;
p2++;
if (*p2 == '\0') { // 如果str2中的所有字符都比较完了,则表示匹配成功,计数器加1
sum++;
p2 = str2; // 重新指向str2的开头,准备下一次匹配
}
} else { // 如果当前字符不相等,则重新从str2的开头开始匹配
p1 = ++str1; // 注意这里要先自增str1的指针,再将其赋值给p1
p2 = str2;
}
}
printf("The number of times str2 appears in str1 is: %d\n", sum);
return 0;
}
```
需要注意的是,上面的程序中使用了一个技巧,即在匹配失败后,将str1的指针直接移动到下一个字符处,而不是重新从当前位置开始匹配。这样可以避免重复比较已经比较过的字符,提高效率。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)