鱼C论坛

 找回密码
 立即注册
查看: 1380|回复: 2

[已解决]统计三行中的大小写字母 数字 空格 其他字符的个数

[复制链接]
发表于 2019-12-27 17:45:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        char a[3][81]={'\0'};//为什么要有'\0'???
        int i,j,sum[3][5];
        int w_x=0,w_d=0,num=0,space=0,other=0;
        
        printf("请输入三行文字:");
        for(i=0;i<3;i++)
        {
                gets(a[i]); 
                for(j=0;j<81;j++)
                {
                        if(a[i][j]<='z'&&a[i][j]>='a') w_x++;
                        else if(a[i][j]<='Z'&&a[i][j]>='A') w_d++;
                        else if(a[i][j]<='9'&&a[i][j]>='0') num++;
                        else if(a[i][j]==' ') space++;
                        else other++;
                }
                        
        } 
                
                
        printf("大写字母有%d个,小写字母有%d个,数字有%d个,空格有%d个,其他字符有%d个",w_d,w_x,num,space,other);
        
        
        return 0;
}
问题打在代码里的第四行了 不知道为什么a[3][81]={'\0'}。。。。。
原本我是只有int a[3][81];的 但结果运行有错 可是加了一个={'\0'}就没错了

为啥啊??求解!谢谢!!


最佳答案
2019-12-27 19:38:29
本帖最后由 superbe 于 2019-12-27 19:40 编辑

char a[3][81]数组每行可以装81个字符,实际输入时每行可能不到81个字符,但在代码里for(j=0;j<81;j++)这行是按81个字符判断的,
假如你输入了10个字符(gets加上一个\0),后面70个都是内存中的随机值,可能造成误判。
加上 ={'\0'}后,将数组所有元素都初始化为\0,这个空字符的asii码是0,不在 大小写字母、数字、空格的范围之内,所以判断这些字符的个数是正确的。
但是else other++;仍会执行,所以判断其它字符的个数是不对的。

修改如下:
内层的for这行改成 for (j = 0; j<strlen(a[ i ]); j++)   strlen()函数需要# include <string.h>
={'\0'}可以去掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-27 19:38:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-12-27 19:40 编辑

char a[3][81]数组每行可以装81个字符,实际输入时每行可能不到81个字符,但在代码里for(j=0;j<81;j++)这行是按81个字符判断的,
假如你输入了10个字符(gets加上一个\0),后面70个都是内存中的随机值,可能造成误判。
加上 ={'\0'}后,将数组所有元素都初始化为\0,这个空字符的asii码是0,不在 大小写字母、数字、空格的范围之内,所以判断这些字符的个数是正确的。
但是else other++;仍会执行,所以判断其它字符的个数是不对的。

修改如下:
内层的for这行改成 for (j = 0; j<strlen(a[ i ]); j++)   strlen()函数需要# include <string.h>
={'\0'}可以去掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-12-27 19:57:19 | 显示全部楼层
superbe 发表于 2019-12-27 19:38
char a[3][81]数组每行可以装81个字符,实际输入时每行可能不到81个字符,但在代码里for(j=0;j

哇!!谢谢你!!懂了懂了懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表