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


82

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

例如:

string word = "dabc";

我想将其更改为:

string sortedWord = "abcd";

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


7
std::sort
dreamlax 2012年

请注意,任何类型的基于朴素char值的排序都使用UTF-8中断-根据您的字符串,您可能需要考虑语言环境。
Christian Severin

Answers:


146

标头中的标准库中有一个排序算法<algorithm>。它会原地排序,因此,如果您执行以下操作,则原始单词将被排序。

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

如果您不想丢失原件,请先进行复印。

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

如果我们希望字符串按升序排序怎么办?
房间

3
@madhuspotstd::sort默认情况下按字母升序排序。假设这是一个轻微的错字,你想压痕顺序,使用的版本std::sort,需要一个Compare作为其第三个参数并提供std::greater,而不是默认std::less。默认std::string使用char类型,例如std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>());-在原始问题中给出的结果为“ dcba”,而不是“ abcd”。
汤米(Tommy)”

3
@madhuspot或使用std :: reverse
文森特

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

这里


10
这是最好的方法...如果字符串使用单字节编码。否则,您将把字符分成它们的组成字节。
Ben Voigt 2012年

2

您必须sortalgorithm标头文件中包含函数,该文件是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


1

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

        #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;
        }

输出:

阿克洛斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.