C++字符串字符排序

102

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

例如:

string word = "dabc";

我想要将其更改为:

string sortedWord = "abcd";

也许使用char会是更好的选择?在C++中我该怎么做呢?


7
std::sort 怎么样? - dreamlax
请注意,任何基于简单字符值的排序都会在UTF-8中出现问题--根据您的字符串,您可能需要考虑区域设置。 - Christian Severin
4个回答

182

标准库中有一种排序算法,在头文件<algorithm>中。它会原地排序,所以如果你执行以下操作,原始单词将被排序。

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

如果你不想丢失原始数据,先做一份拷贝。

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

如果我们想要按升序排序字符串怎么办? - The Room
6
默认情况下,std::sort 按字母顺序递增排序。如果您想按照递减顺序进行排序,可以使用带有第三个参数 Comparestd::sort 版本,并提供 std::greater 代替默认的 std::lessstd::string 默认使用 char 类型,所以例如 std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>()); — 在原始问题中将得到结果 "dcba",而不是 "abcd"。 - Tommy
4
@madhuspot 或使用 std::reverse - Vincent

17
std::sort(str.begin(), str.end());

看看这里


11
如果字符串使用单字节编码,这是最好的方法。否则,你会将字符分解为其组成的多个字节。 - Ben Voigt

3
你需要包含位于 algorithm 标头文件中的 sort 函数,它是C++中的 标准模板库用法: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


2
你可以使用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;
        }

输出:

achklors


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接