C语言程序 统计一个句子中的字母,数字,空格还有其他字符的个数 帮我看看下面这个程序错在哪
#include<stdio.h>intmain(){inta=0,b=0,c=0,d=0,i;charx[100];gets(x);for(i=0;x[i]!='\0'...
#include<stdio.h>
int main()
{
int a=0,b=0,c=0,d=0,i;
char x[100];
gets(x);
for(i=0;x[i]!='\0';i++)
{
if((x[i]>=65&&x[i]<=90)||(x[i]>=97&&x[i]<=122))
a=a+1;
else if(x[i]==' ')
b=b+1;
else if(x[i]>='0'&&x[i]<='9')
c=c+1;
else
d=d+1;
}
printf("字母的个数是%d\n",a);
printf("空格的个数是%d\n",b);
printf("数字的个数是%d\n",c);
printf("其他字符的个数是%d\n",d);
return 0;
}
运行结果为
请输入一个字符串
金琇泽
字母的个数是1
数字的个数是0
空格的字数是0
其他字符的个数是5
Press any key to continue
很奇怪的是 输入这三个中文字的时候老是不对,换其他的又好像对了,真的很蛋疼,为什么啊 展开
int main()
{
int a=0,b=0,c=0,d=0,i;
char x[100];
gets(x);
for(i=0;x[i]!='\0';i++)
{
if((x[i]>=65&&x[i]<=90)||(x[i]>=97&&x[i]<=122))
a=a+1;
else if(x[i]==' ')
b=b+1;
else if(x[i]>='0'&&x[i]<='9')
c=c+1;
else
d=d+1;
}
printf("字母的个数是%d\n",a);
printf("空格的个数是%d\n",b);
printf("数字的个数是%d\n",c);
printf("其他字符的个数是%d\n",d);
return 0;
}
运行结果为
请输入一个字符串
金琇泽
字母的个数是1
数字的个数是0
空格的字数是0
其他字符的个数是5
Press any key to continue
很奇怪的是 输入这三个中文字的时候老是不对,换其他的又好像对了,真的很蛋疼,为什么啊 展开
3个回答
展开全部
你的程序是对的,没有任何问题,是你的输入错了,如果你输入的里面没有汉语,只有英语,即,你的输入的是字母,数字,空格以及其他符号,就没有问题。
为什么呢?这个取决于汉字的编码:
比如说,我是说比如啊,因为我也没仔细的了解汉字的真正编码,所以举个例子:
“金琇泽“
这三个字,在你看来,是三个汉字,但是,在你的程序看来,其实是6个char类型的变量,
因为一个汉字,是用两个字节来表示的。
比如:计算机把“金琇泽”看成了 0x02 0x45 0x89 0x33 0x56 0x88 ,我是举例子,总之计算机就把以上看成了是6个char类型变量,然后进行判断的。
为什么呢?这个取决于汉字的编码:
比如说,我是说比如啊,因为我也没仔细的了解汉字的真正编码,所以举个例子:
“金琇泽“
这三个字,在你看来,是三个汉字,但是,在你的程序看来,其实是6个char类型的变量,
因为一个汉字,是用两个字节来表示的。
比如:计算机把“金琇泽”看成了 0x02 0x45 0x89 0x33 0x56 0x88 ,我是举例子,总之计算机就把以上看成了是6个char类型变量,然后进行判断的。
追问
那如果是把三个汉字看成了六个char类型变量,那最后不是有六个其他字符,但是为什么结果是5个其他字符和一个字母呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个程序是考你ASCII码的,a-z A-Z,中文不再这个表里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能这几个字的编码超出了某个范围吧
追问
你能深入的解释下吗 我还是不太明白 还有就是,程序是不是没有问题啊? 我刚才又试了下,只有 琇 不对 ;
追答
程序应该是没问题的。我觉得琇这个字的编码可能超出了char的范围,导致出现异常
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询