0

我正在从 Stephen Prata 的C Primer Plus中学习C。这是第 11 章中的一个问题。

编写一个程序,最多可读取 10 个字符串或 EOF,以先到者为准。是否为用户提供了一个菜单,有五种选择:打印字符串的原始列表、按 ASCII 排序顺序打印字符串、按长度递增的顺序打印字符串、按字符串中第一个单词的长度顺序打印字符串,然后退出。让菜单循环,直到用户输入退出请求。当然,该程序应该实际执行承诺的任务

我理解这个问题,除了它要求“以 ASCII 整理序列打印字符串”的位。这是什么意思?这是否意味着我必须像 ASCII 整理顺序一样更改字符顺序?

4

4 回答 4

1

排序规则意味着字符串的“逻辑”排序。对于“C”语言环境,这确实等同于按 ASCII 码排序(使用strcmp())。

但是,排序规则取决于语言环境

例如,在 ISO 8859-1 编码和 DE 语言环境中,字母 "ü" (0xfc) 不应在列表末尾的 "z" (0x7a) / 之后结束,就像strcmp()排序一样,而是排序等同于“ue”(0x75 0x65)...

并且因为您不可能知道所有现有语言环境的所有事实,标准库提供了、 、strcoll()strxfrm()to选项,它们为您执行特定于语言环境的工作。wcscoll()wcsxfrm()LC_COLLATEsetlocale()

欢迎来到国际化的世界。;-) 幸运的是,这个问题明确要求“ASCII 整理”,这意味着你侥幸逃脱strcmp()...

于 2013-01-11T10:40:47.843 回答
0

我认为这意味着对您读取的字符串进行简单排序,并根据字符 ASCII 值对它们进行排序。

所以如果输入两个字符串:"aa"and "aA",排序后的顺序应该是"aA"and "aa"。此顺序是因为 的 ASCII 值'a'高于 的 ASCII 值'A'

于 2013-01-11T10:28:03.263 回答
0

排序是定义的顺序,任务是按ASCII顺序对输入字符串进行排序,即作为标准的“排序”命令,而不是改变每个字符串中字符的顺序——措辞可以更清楚,你只能推断基于其他任务的意图。

于 2013-01-11T10:28:45.290 回答
0

谷歌是你的朋友:

ascii 整理顺序
Web 定义 在 ASCII 图表中定义字符的顺序。(见附录 B)。

因此,您应该按其字符代码/字符元素的值对字符串进行排序。

于 2013-01-11T10:29:12.863 回答