| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 681 人关注过本帖
标题:问几个简单的问题
只看楼主 加入收藏
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
问几个简单的问题
下面几个宏是从ctype.h中复制的:
     
程序代码:
#define    _UPPER        0x0001
#define    _LOWER        0x0002
#define    _DIGIT        0x0004
#define    _SPACE        0x0008 /* HT  LF  VT  FF  CR  SP */
#define    _PUNCT        0x0010
#define    _CONTROL    0x0020
#define    _BLANK        0x0040 /* this is SP only, not SP and HT as in C99  */
#define    _HEX        0x0080
#define    _LEADBYTE    0x8000

/****************************************/  //下面是问题

  islower('a') == islower('b') ==  _LOWER //值为 2
  isupper('A') == islower('B') ==  _UPPER //值为 1
  isalnum('a') == _LOWER ,isalnum('A')==  _UPPER //


我想问的就是这样设计有什么好处?
比如说isalnum怎么不设计成: 如果 x是字母或者是数字,isalnum(x)直接返回1,否则返回0. 

 

 

 

 
2010-09-04 16:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:4 
了解宏的用处。

我就是真命天子,顺我者生,逆我者死!
2010-09-04 16:53
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
我想问的是:
 这些判断函数的返回值怎么不直接设计成1(是)和0(不是).怎么还要区分参数的不同.
比如我我们可以直接用函数isupper来判断是不是大写字母,根本可以不用isalnum(也可以用来判断大写字母,小写字母,和数字)这个函数来判断大写字母.

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-04 16:58
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:4 
只要不是 0 , 在条件中就是真, 要是把所有非零值都转成 1 太费事了吧.
2010-09-04 20:13
cacker
该用户已被删除
收藏
得分:4 
提示: 作者被禁止或删除 内容自动屏蔽
2010-09-04 22:44
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:4 
-区分大小写。(大小写转换也方便)
-配合位操作。(移位,掩码)


[ 本帖最后由 cosdos 于 2010-9-4 23:18 编辑 ]

—>〉Sun〈<—
2010-09-04 23:10
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
晕 ! 我说了半天竟没有多数人理解我的意思。
再问个2个问题:
     1.这些个判断函数差不多形参都是 int,比如说isalnum的原型是int isalnum(int);
       如果我们调用isalnum(n)这个函数,如果n>256,得到的结果是什么意思。
     2.其他的宏我知道有什么意义,但#define    _LEADBYTE    0x8000这个宏是什么意思,

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-04 23:51
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:4 
设计,每人都不相同,有时你觉得你的办法更好,不妨一试,有时觉得别人的设计无法理解,那可能是你没了解作者的意图而已
收到的鲜花
  • Windy0Winll2010-09-05 14:00 送鲜花  5朵   附言:很好,超赞:)

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-09-05 00:14
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
1) 比较复杂。
   getchar() getc() 读取到文件结尾时(或读取错误),返回-1。
   因为\0也是字符。'\0'==0,所以不能返回0,到达文件结尾。

   char类型,C语言没有规定其是signed或unsigned。但int是signed的。
   int的位长是计算机的自然位长。通过一次读取就能读取。

   isalnum(300) (不用于判断非ASCII字符)。综合上述我认为应该返回0.

2) 非字符,多字节字符集,扩展ASCII字符集。判断。


纯个人看法。

想要弄清这些,最好看C99标准。


—>〉Sun〈<—
2010-09-05 00:22
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:0 
最近闲着没事做,想来实现C库中的那些常见函数,还没写几个函数,就遇到问题了。看了ctype.h(dev cpp)中的函数声明,那些个简单的函数现在都不知道它的详细功能了:我写的那几个函数只能在0~255之间能正确工作,不知道如果大于256以后的是用来作什么。

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-05 00:48
快速回复:问几个简单的问题
数据加载中...
 
   



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

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