【问题标题】:In C, how possibly can an (implementation-defined?) character parameter be true for both islower() and isupper()? Book says so在 C 中,(实现定义的?)字符参数怎么可能对 islower() 和 isupper() 都为真?书是这么说的
【发布时间】:2014-11-27 05:17:09
【问题描述】:

以下两行,关于 islower()isupper(),在 Mike Banahan (Link: Section 9.3) 的 C 书的同一段落中给出:

islower(int c)

如果 c 是小写字母则为真。也是真的 对于实现定义的不返回的字符集 iscntrl、isdigit、ispunctisspace 中的任何一个的真实结果。在里面 C 语言环境,这组额外的字符是空的。

isupper(int c)

如果 c 是大写字母字符,则为真。还 true 对于实现定义的字符集,不 从 iscntrl、isdigit、ispunctisspace 中的任何一个返回真实结果。 在 C 语言环境中,这组额外的字符是空的。

你能解释一下,如果一个字符不从 iscntrl、isdigit、ispunctisspace 中的任何一个返回真实结果,那么它如何导致两者都返回真实结果功能?据我所知,一个字符可以是小写,也可以是大写,不能两者兼有(假设我们谈论的是具有这种区别的字符集......大多数欧洲语言都有)。

【问题讨论】:

  • 如果一个确实为 iscntrl、isdigit、ispunct 或 isspace 之一返回 true 的字符也为 islower 或 isupper 返回 true,我会更加惊讶!
  • @PeterSchneider 这部分我理解,因为如果一个字符对你提到的任何函数返回 true,它就不是字母表......

标签: c function ctype


【解决方案1】:

书中的引述并未声称 isupper 和 islower 对于同一个符号必须同时返回 true。他们只是说,如果使用 C 以外的其他语言环境,则可能有一些额外的符号,isupper 或 islower(或两者)都可以返回 true。

考虑到 C 标准根据 isupper 和 islower 定义 isalpha

isalpha 函数测试任何 isupper 或 islower 是真的,

尽管似乎可以将相同的特定于语言环境的符号同时视为上和下。也就是说,所有四种组合都是可能的。例如

isupper: false, islower: false
isupper: true, islower: false
isupper: false, islower: true
isupper: true, islower: true

C 标准有一个脚注:

200) islower 和 isupper 函数分别测试真假 对于这些附加字符中的每一个;所有四种组合都是 可能

【讨论】:

  • 请再详细一点,尤其是在你的答案最后一行的上下文中的“isalpha”。
【解决方案2】:

对于“C”语言环境以外的语言环境,它可以返回 true(对两个函数),这可以定义额外的字符:-

在那种情况下:-

isalpha、isupper 和 islower 返回非零(假设字符导致 iscntrl、isdigit、ispunct 和 isspace 返回零)。

作为参考,您可以在这里更好地理解此依赖关系:-http://www.qnx.com/developers/docs/6.4.0/dinkum_en/cpp/ctype.html

【讨论】:

  • 感谢您的链接。
猜你喜欢
  • 2011-05-22
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多