编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数.

#include<stdio.h>
#include<string.h>

int main()
{
int fun(char a[],char b[]);
char a[1000],b[2];
int s;
printf("输入字符串:\n");
gets(a);
printf("输入要计算的两个字母:");
gets(b);
s=fun(a,b);
printf("两个字母所重复的次数:%d",s);

}
int fun(char a[],char b[])
{
int i,s=0,m;
m=strlen(a);
for(i=0;i<m;i++)
if(a[i]==b[0]&&a[i+1]==b[1])
s++;

return s;
}
为什么这样不行

你的char b[2]定义有问题,应该定义为char b[3],否则你“输入要计算的两个字母”时就会出现数组越界。这里要讲到【字符数组】的用法。

字符数组的初始化与数组的初始化一样,要么定义时初始化,要么定义后初始化。系统对字符数组会自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的。(通过sizeof()()函数可验证)。所以你定义的char b[2]要改成3个字节长度,当你输入两个字母如"ab",系统会自动加"\0"作为结束字符,总共占3个字节长度,否则会提示数组越界。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-22
1 传入两个字符串作为参数。
2 对源字符串进行遍历。
3 逐个判断字符串是否为字串,如是,则累加。
4 返回结果。
代码:
int calc_sub(char *s, char *p)
{
int r = 0;
while(*s)
{
if(p[0] == s[0] && p[1] == s[1]) r++;//由于限定p只有2个字符,所以直接比较即可。
s++;
}

return r;
}
相似回答