c语言中输入2个字符串sub,str,统计sub在str中出现的次数,如果一次都没出现,则输出0。例如,"cabafgababac"中含子串"aba"的个数为3(注意观察该例子,个数不是2个)。str,sub长度不超过50。
时间: 2024-05-13 20:15:09 浏览: 45
可以使用双重循环来实现对子串的匹配,具体步骤如下:
1. 从 str 的第一个字符开始,依次截取与 sub 长度相同的子串;
2. 判断该子串是否与 sub 相等,如果相等则计数器加一;
3. 将起始位置后移一位,继续截取子串,重复步骤 2 和 3,直到 str 的末尾。
下面是具体的 C 语言代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[51], sub[51];
int len_str, len_sub, count = 0;
printf("请输入字符串 str:");
fgets(str, sizeof(str), stdin);
len_str = strlen(str) - 1;
str[len_str] = '\0'; // 去掉字符串末尾的换行符
printf("请输入字符串 sub:");
fgets(sub, sizeof(sub), stdin);
len_sub = strlen(sub) - 1;
sub[len_sub] = '\0';
for (int i = 0; i <= len_str - len_sub; i++)
{
int j;
for (j = 0; j < len_sub; j++)
{
if (str[i+j] != sub[j])
break;
}
if (j == len_sub)
count++;
}
printf("子串 %s 在字符串 %s 中出现了 %d 次。\n", sub, str, count);
return 0;
}
```
注意,fgets 函数可以读取一行字符串,并且会保留字符串末尾的换行符,因此需要将其替换为字符串结束符 '\0'。同时,由于字符串下标从 0 开始,因此内层循环的终止条件是 j < len_sub(而不是 j <= len_sub);如果匹配成功,内层循环结束后 j 的值应该等于 len_sub。
阅读全文