Сортировка символов строки C ++


86

Если у меня есть строка, есть ли встроенная функция для сортировки символов или мне придется писать свои собственные?

например:

string word = "dabc";

Я бы хотел изменить его так, чтобы:

string sortedWord = "abcd";

Может быть, использование char - лучший вариант? Как бы я сделал это на C ++?


7
О чем std::sort?
dreamlax

Обратите внимание, что любая сортировка, основанная на наивном значении символов, прерывается с UTF-8 - в зависимости от ваших строк вы, возможно, захотите принять во внимание языковой стандарт.
Кристиан Северин

Ответы:


149

Существует алгоритм сортировки в стандартной библиотеке, в заголовке <algorithm>. Он сортируется по месту, поэтому, если вы сделаете следующее, исходное слово будет отсортировано.

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

Если вы не хотите потерять оригинал, сначала сделайте копию.

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

Что, если мы хотим, чтобы строка была отсортирована в порядке возрастания?
The Room

3
@madhuspot std::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
Это лучший способ ... ЕСЛИ строка использует однобайтовую кодировку. В противном случае вы разделите символы на составляющие байты.
Бен Фойгт

2

Вы должны включить sortфункцию, которая находится в algorithmфайле заголовка, который является стандартной библиотекой шаблонов. в 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;
        }

Вывод:

ачклорс

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.