#include<stdio.h>
#include<string.h>
int main()
{
char str[3][80];
char c;
int i,j;
int up=0,low=0,num=0,n=0,other=0;
for(i=0;i<=2;i++)
gets(str);
for(i=0;i<3;i++)
for(j=0;j<80;j++)
{
c=str[i][j];
if(c==' ')
n=n+1;
else if(c<='Z'&c>='A')
up=up+1;
else if(c<='z'&c>='a')
low=low+1;
else if(c<='9'&c>='0')
num=num+1;
else other=other+1;
}
printf("up=%d,low=%d,num=%d,n=%d,other=%d
\n",up,low,num,n,other);
return 0;
}
有一篇文章,共有3行文字,每行有个80字符.要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数.中间是不是一定要{
c=str[i][j];
if(c==‘\0’)break; 为什么?
上面是没有加if(c==‘\0’)break; 的结果 为什么会这样
你下面的结果也不对把,空格没有啊,因为字符串的格式是****\0\0\0\0\0……一直补到结束为止,所以你有很多other
追问嗯 写上了个空格嘛 暂且忽略空格的事 为什么没有那句break的时候会那个样子
追答你定义了每个字符串都是长度是80对吧,总长度是240,如果你第一个字符串可见长度只是10的话,那么后面70个位置都会是\0,所以你第一个的所有的总数加起来是240,而空格和\0的分辨不是很好。你可以直接读取你的str[0][50]这个字符(即第一行第51个字符,尽管你看不见它 )和"\0"作比较,结果应该是相等的 。