标题:问一下c-'0'表示什么?
只看楼主
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
结帖率:92.31%
已结贴  问题点数:20 回复次数:5 
问一下c-'0'表示什么?
#include <stdio.h>
   /* count digits, white space, others */
   main()
   {
       int c, i, nwhite, nother;
       int ndigit[10];
       nwhite = nother = 0;
       for (i = 0; i < 10; ++i)
           ndigit[i] = 0;
       while ((c = getchar()) != EOF)
           if (c >= '0' && c <= '9')
               ++ndigit[c-'0'];
           else if (c == ' ' || c == '\n' || c == '\t')
               ++nwhite;
           else
               ++nother;
       printf("digits =");
       for (i = 0; i < 10; ++i)
           printf(" %d", ndigit[i]);
       printf(", white space = %d, other = %d\n",
           nwhite, nother);
   }



这个代码中 ++ndigit[c-'0'];怎么理解?直接++ndigit[c]不行吗?c-'0'表示什么?
搜索更多相关主题的帖子: include others white 
2013-05-14 13:48
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
得分:7 
个人理解:

在ASCII码里'0'的值是48

因为getchar()得到的是一个字符
假设输入0 ,得到的是字符'0'

用48 - 48 = 0 来得到一个无符号整数,因为数组的下标必须为无符号整数

如果不减去'0'那么[48] 显然越界了

[ 本帖最后由 Ryker 于 2013-5-14 14:13 编辑 ]
2013-05-14 14:12
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:7 
减去字符零,是为了得到整数,比如字符'1'-'0'就得到整型1

Maybe
2013-05-14 21:01
支风儿
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2013-4-6
得分:7 
表示转换成int型呀
2013-05-14 21:03
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
得分:0 
回复 2楼 Ryker
数组的下标是正整数不就行了吗?
2013-05-15 14:25
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
得分:0 
回复 2楼 Ryker
懂了  谢谢
2013-05-15 15:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407050-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039689 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved