#include <stdio.h>
int main()
{ int i,n=0
char c,s[100]
gets(s)
c=getchar()
for(i=0s[i]i++)
if(c==s[i])n++
printf("%d",n)
return 0
}
逻辑错了,按照你输入的字符串aabbccddeeffgga的统计不会有问题,但是后面的都会出错
for(i=0i<leni++){flag=0 //这里开始,前面两个a不会出错//第一个a不进内部循环,let[0]会被赋值//第二个a进入内部循环,在j为0时给let[0].count自增,并跳出循环//第三个b进入内部循环,找不到相同字母,跑完循环,let[1]会被赋值//第四个b进入内部循环,在j为2时给let[2].count自增//但是实际上此时let[2]是没有数据的,你应该是给let[1].count自增for(j=0j<ij++){if(str[i]==str[j]){flag=1 let[j].count++ break }}if(!flag){let[a].data=str[i] let[a].count++ a++ }}错误就像上面写的那样
其实你这个方法对那些交叉排列的字符来说,更加不好进行统计
如果你要输入的字符是某一个集合,你完全可以用一个长度为字符集大小的数组来保存各字符的出现次数
比如全为小写字母时,你可以声明一个int cnt[26]
数组的下标可以标识字符,0 == 'a' - 'a'、1 == 'b' - 'a'、...、25 == 'z' - 'a'
自己考虑
#include <stdio.h>int main(void)
{
int num[10]={0}
int space=0,sels=0
char ch
while((ch=getchar())!=EOF)
{
if(ch>='0'&&ch<='9')
num[ch-'0']++
else if(ch==' '||ch=='\t'||ch=='\n')
space++
else
sels++
}
for(ch=0ch<10ch++)
printf("%d ",num[ch])
putchar('\n')
printf("%d\n",space)
printf("%d\n",sels)
return 0
}