对 C++ 字符串的字符进行排序

Posted

技术标签:

【中文标题】对 C++ 字符串的字符进行排序【英文标题】:Sorting Characters Of A C++ String 【发布时间】:2012-02-24 19:45:39 【问题描述】:

如果我有一个字符串,是否有内置函数来对字符进行排序,还是我必须自己编写?

例如:

string word = "dabc";

我想改变它:

string sortedWord = "abcd";

也许使用 char 是更好的选择?我将如何在 C++ 中做到这一点?

【问题讨论】:

std::sort 呢? 请注意,任何类型的基于 char 值的简单排序都会因 UTF-8 而中断 - 根据您的字符串,您可能需要考虑语言环境。 【参考方案1】:

标准库中有a sorting algorithm,在标头<algorithm>中。它会就地排序,因此如果您执行以下操作,您的原始单词将被排序。

std::sort(word.begin(), word.end());

如果您不想丢失原件,请先复制一份。

std::string sortedWord = word;
std::sort(sortedWord.begin(), sortedWord.end());

【讨论】:

如果我们希望字符串按升序排序怎么办? @madhuspot std::sort 默认按字母升序排序。假设这是一个小错字并且您想要de增加顺序,请使用std::sort 的版本,该版本将Compare 作为其第三个参数并提供std::greater 而不是默认的std::lessstd::string 默认使用 char 类型,例如std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>()); — 这将在原始问题中给出“dcba”而不是“abcd”的结果。 @madhuspot 或使用 std::reverse【参考方案2】:
std::sort(str.begin(), str.end());

见here

【讨论】:

这是最好的方法...如果字符串使用单字节编码。否则,您会将字符分解为其组成字节。【参考方案3】:

您必须包含 sort 函数,该函数位于 algorithm 头文件中,它是 c++ 中的 standard template library。

用法:std::sort(str.begin(), str.end());

#include <iostream>
#include <algorithm>  // this header is required for std::sort to work
int main()

    std::string s = "dacb";
    std::sort(s.begin(), s.end());
    std::cout << s << std::endl;

    return 0;

输出:

abcd

【讨论】:

【参考方案4】:

您可以使用sort() 函数。 sort() 存在于algorithm 头文件中

        #include<bits/stdc++.h>
        using namespace std;


        int main()
        
            ios::sync_with_stdio(false);
            string str = "sharlock";

            sort(str.begin(), str.end());
            cout<<str<<endl;

            return 0;
        

输出:

阿克洛尔

【讨论】:

以上是关于对 C++ 字符串的字符进行排序的主要内容,如果未能解决你的问题,请参考以下文章

C++:使用 LSD 基数排序对字符串进行排序崩溃

用于对字符串进行排序的 C++ sort() 函数

按字母顺序对字符串数组进行排序 C++

用于对字符串向量进行排序的比较函数(每个字符串都是一个数字)C++

在 C++ 中对字符串数组进行排序

如何在 C++ 中对以下字符串序列进行排序?