c语言统计字符串中每个字符出现的次数

#include<stdio.h>#include<string.h>#include<math.h>intmain(){intl=0,s=0,n=0,o=0;chara... #include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int l=0,s=0,n=0,o=0;
char a[1000];
scanf("%s\n",a);
int length = strlen(a);
for(int i = 0; a[i]!='\0'; i++)
{
if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'&&a[i]>='A')
{ l++; }
else
{ if(a[i]==' ')
{ s++; }
else
{ if(a[i]<='9'&&a[i]>='0')
{ n++; }
else o++;
}
}
}
printf("字母:%d\n",l);
printf("数字:%d\n",n);
printf("空格:%d\n",s);
printf("其他:%d\n",o);
}

为什么统计不了空格???
展开
 我来答
xuzhouliuying
高粉答主

2018-06-22 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:5.4万
采纳率:86%
帮助的人:2.4亿
展开全部

scanf语句遇到空格、退格符、回车就结束读取,因此如果字符串中有空格,不能用scanf,可以用gets。另外,这个程序写得实在太乱了。太多大括号,基本上都不需要,一对大括号就可以了。else if的用法也不是这样用的。printf语句也没必要分这么多句。main为int型,要有返回值。修改一下:

#include <stdio.h>
#include <string.h>
int main()
{
int l=0,s=0,n=0,o=0;
char a[1000]={'\0'};
gets(a);
for(int i=0;a[i]!='\0';i++) 
if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'&&a[i]>='A')
l++;
else if(a[i]==' ') s++;
else if(a[i]<='9'&&a[i]>='0') n++;
else o++;
printf("字母: %d\n数字: %d\n空格: %d\n其它: %d",l,n,s,o);
return 0;
}

//运行示例:

古神孤鸿
2018-06-22 · TA获得超过179个赞
知道小有建树答主
回答量:292
采纳率:60%
帮助的人:96.8万
展开全部
用scanf接收字符串,在串首遇到空白字符会跳过。但如果再遇到空白字符就会结束字符串的输出。因此解决方法是用gets读取字符串,因为gets只有遇到换行符才会停止读入
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式