统计一串字符中每个字符出现的次数:(C语言)

来源:百度知道 编辑:UC知道 时间:2024/04/27 15:11:47
比如aabcbddffd
a:2
b:2
c:一个可以不用
d:3
f:2
#include<stdio.h>
#include<string.h>
main()
{
int i,n,s,m,a=0;
int tj[60];
char zf[60];
printf("请输入要统计的字符串:");
gets(zf);
n=strlen(zf);
for(i=0;i<n;i++)
{
tj[i]=1;
for(m=i+1;m<n;m++)
{
if(zf[i]==zf[m])
{
tj[i]++;
n--;
for(a=m;a<n;a++)
{
zf[a]=zf[a+1];
}
}
}
printf("%s: %d\n",zf[i],tj[i]);
}
}
错哪里?
非常感谢!没有想到我的思路对的~!
谢谢各位高手的指导~!
flashwenxin做的好像是和我一样犯了同样的饿错误哦!
我也很谢谢你!
laocui172做的我多次运行了是对的!谢谢帮助!
Y_Snow说的"遍历数组"我不懂是什么!可是我知道你说的意思了!我回加强C语言的!
我总是做不出来!问得没有分数了!哈哈!我以后水是勤快点的好!!多看书!去论坛找吧!不用麻烦大家了!

printf("%s: %d\n",zf[i],tj[i]);
里边%s改为%c
printf("%c: %d\n",zf[i],tj[i]);

%s是格式化为字符串,以字符'\0'终止的,可是你的程序根本没有在缩短字符串后清理原有字符,自然得不到正常终止符
%c是格式化为字符,就是char数组的一个元素,这个才是你要的

//以下程序测试通过
#include<stdio.h>
#include<string.h>
main()
{
int i,j,k,n,s,m,a=0;
int pos;
int tj[60];
char zf[60];
printf("请输入要统计的字符串:");
gets(zf);
n=strlen(zf);
pos=0;
for(i=0;pos<n;i++,pos++)
{
tj[i]=1;
do{
j=0;
while(zf[j++]!=zf[pos]);
if(j-1==pos)
{
break;
}
}while(pos++);
if(pos==n)
{
break;
}
for(k=pos+1;k<n;k++)
{
if(zf[k]==zf[pos])
{
tj[i]++;
}
}
printf("%c: %d\n",zf[pos],tj[i]);
}
}

问题:
1、printf(......就不说了。

2、你的想法:如果找到一个相同的字符,那么数组往前移动一位