【问题标题】:C++ Alphabetically sorting stringsC++ 按字母顺序排序字符串
【发布时间】:2015-11-20 19:31:38
【问题描述】:

我是 C++ 新手,我在学校的任务是制作按字母顺序对字符串进行排序的程序。那么有人可以解释一下我该怎么做吗?

【问题讨论】:

  • 首先,你得到所有的字符串。你要从输入还是文件中获取它?之后,您需要查看是否可以使用 std::string 或者是否需要使用 char 数组。此外,检查您是否被允许使用 std::sort 或者您是否必须自己实现排序。既然你在上面,请检查是否需要将字符串存储在数组中,或者是否可以使用 std::vector 例如。
  • 我应该在数组中输入来自用户的字符串,我没有任何限制。它只需要程序正确运行。
  • 先写一个程序打开文件成功。确保它有效。然后添加代码以循环读取文件中的一行。确保它有效。然后添加代码以将读取的每一行存储在一个数组中,确保它有效。等等。您是否完成了这些初步步骤?
  • @ĐorđeMilanović 您需要决定使用哪种排序方法。:) 最简单的方法是冒泡排序、选择排序、插入排序。但它们效率不高。您可以尝试编写快速排序或其他方法。
  • 我已将所有字符串存储在一个数组中,并且一切正常,我只需要以某种方式对它们进行排序并在之后打印(我知道)。

标签: c++ string sorting


【解决方案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,他对此提供了更多见解。
    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多