Сортування символів рядка C ++


86

Якщо у мене є рядок, чи є вбудована функція для сортування символів, чи мені доведеться писати власні?

наприклад:

string word = "dabc";

Я хотів би змінити це так, щоб:

string sortedWord = "abcd";

Можливо, використання char - кращий варіант? Як я можу це зробити в C ++?


7
Що про std::sort?
dreamlax 02

Зверніть увагу, що будь-який тип сортування на основі наївних значень переривається з UTF-8 - залежно від ваших рядків ви можете взяти до уваги локаль.
Крістіан Северин

Відповіді:


149

У стандартній бібліотеці, в заголовку, є алгоритм сортування<algorithm> . Він сортується на місці, тому, якщо ви зробите наступне, ваше оригінальне слово стане відсортованим.

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

Якщо ви не хочете втратити оригінал, спершу зробіть копію.

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

Що робити, якщо ми хочемо, щоб рядок відсортовано за зростанням?
Кімната

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.