C++ 按字母顺序排序字符串
Posted
技术标签:
【中文标题】C++ 按字母顺序排序字符串【英文标题】:C++ Alphabetically sorting strings 【发布时间】:2015-11-20 19:31:38 【问题描述】:我是 C++ 新手,我在学校的任务是制作按字母顺序对字符串进行排序的程序。那么有人可以解释一下我该怎么做吗?
【问题讨论】:
首先,你得到所有的字符串。你要从输入还是文件中获取它?之后,您需要查看是否可以使用 std::string 或者是否需要使用 char 数组。此外,检查您是否被允许使用 std::sort 或者您是否必须自己实现排序。既然你在上面,请检查是否需要将字符串存储在数组中,或者是否可以使用 std::vector 例如。 我应该在数组中输入来自用户的字符串,我没有任何限制。它只需要程序正确运行。 先写一个程序打开文件成功。确保它有效。然后添加代码以循环读取文件中的一行。确保它有效。然后添加代码以将读取的每一行存储在一个数组中,确保它有效。等等。您是否完成了这些初步步骤? @ĐorđeMilanović 您需要决定使用哪种排序方法。:) 最简单的方法是冒泡排序、选择排序、插入排序。但它们效率不高。您可以尝试编写快速排序或其他方法。 我已将所有字符串存储在一个数组中,并且一切正常,我只需要以某种方式对它们进行排序并在之后打印(我知道)。 【参考方案1】:使用std::sort
(第二版)并编写一个比较函数,该函数按字母顺序而不是按字典顺序比较字符。如果这必须处理 i18n/l10n,那么这个函数可能更难编写。
【讨论】:
字符串的字典顺序和字母顺序有什么区别? @moooeeeep - 基于底层编码的字典比较——通常基于英文的 ASCII。这意味着“z”出现在“A”之前……实际上是所有数字。通常按字母顺序排列数字,然后是'a',然后是'A',然后是'b',等等......【参考方案2】:首先,请不要在 SO 上要求人们在这里做作业。但是,由于您已经完成了大部分程序,我将给您一些提示:
首先你需要读入字符串,并以某种方式存储它们:
字符串(体面的方法) 数组(可能应该避免这些) 向量(比数组更好的替代品)现在你可以使用内置函数 std::sort (但我猜你不能使用它,因为这是家庭作业)或者你自己写一个排序函数。
考虑如何在字符串/数组/向量中搜索字母表中的特定字母(谷歌搜索“c++ 搜索字符串”会给你一些方法)并考虑大写、小写和标点符号的影响。
主要问题是计算机无法查看一个字母是否在另一个字母之前出现 - 看看您是否可以找到将字符转换为数字的方法(提示:将转换与 ASCII 结合使用表)。
这就是我要提供的所有信息,祝你好运!
编辑:关于排序方法的几句话
有几种主要的排序方法:
冒泡排序 - 按顺序遍历字符串,交换字母 顺序错误。一遍又一遍地重复此操作,直到字符串 排序 插入排序 - 对于每个字母,将其放入新的数组/字符串/向量中的正确位置 快速排序 - 将字符串一分为二,比较两半,交换部分并重复【讨论】:
【参考方案3】:字符串按字母顺序进行比较。让我们花点时间记住,在一天结束的时候,字符串是字符数组,我们也要记住,字符本身也有一个数值,范围从小写的“a”到大写的“Z”,“a”是字母表中的最低值,大写 Z 最高。因此,在幕后,当使用比较运算符比较两个字符串时,您将两个数值相互对照,如果它们恰好相同,则比较将被带到其字符串中的下一个字母。例如,如果按从低到高排序,“dog”会比“doll”排在第一位。
"dog" < "doll" //This will return true
现在,对于排序,我建议您在 数据结构 中查找 排序方法,或者尝试自己想出一个知道字符串如何比较的方法。
【讨论】:
我可以按照 if(a[i] 如果那是一个字符串数组,是的。 阅读 Crazy Eddie 的回答 cmets,他对此提供了更多见解。以上是关于C++ 按字母顺序排序字符串的主要内容,如果未能解决你的问题,请参考以下文章