Sắp xếp các ký tự của một chuỗi C ++


82

Nếu tôi có một chuỗi thì có một hàm tích hợp sẵn để sắp xếp các ký tự hay tôi phải viết riêng?

ví dụ:

string word = "dabc";

Tôi muốn thay đổi nó để:

string sortedWord = "abcd";

Có lẽ sử dụng char là một lựa chọn tốt hơn? Làm thế nào tôi sẽ làm điều này trong C ++?


7
Về std::sortthì sao?
dreamlax

Lưu ý rằng bất kỳ loại sắp xếp dựa trên giá trị ký tự ngây thơ nào đều bị lỗi với UTF-8 - tùy thuộc vào chuỗi của bạn mà bạn có thể muốn xem xét ngôn ngữ.
Christian Severin,

Câu trả lời:


146

một thuật toán sắp xếp trong thư viện chuẩn, trong tiêu đề <algorithm>. Nó được sắp xếp tại chỗ, vì vậy nếu bạn làm như sau, từ gốc của bạn sẽ được sắp xếp.

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

Nếu bạn không muốn mất bản gốc, hãy tạo một bản sao trước.

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

Điều gì sẽ xảy ra nếu chúng ta muốn chuỗi được sắp xếp theo thứ tự tăng dần?
Phòng

3
@madhuspot std::sortsắp xếp theo thứ tự tăng dần theo bảng chữ cái theo mặc định. Giả sử đó là một lỗi đánh máy nhỏ và bạn muốn loại bỏ thứ tự nhàu, hãy sử dụng phiên bản của std::sortđiều đó lấy a Comparelàm đối số thứ ba và cung cấp std::greaterthay vì mặc định std::less. std::stringsử dụng charkiểu theo mặc định, ví dụ như std::sort(sortedWord.begin(), sortedWord.end(), std::greater<char>());- sẽ cho kết quả là "dcba" trong câu hỏi ban đầu thay vì "abcd".
Tommy

3
@madhuspot hoặc sử dụng std :: ngược
Vincent

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

Xem tại đây


10
Đây là cách tốt nhất ... NẾU chuỗi đang sử dụng mã hóa byte đơn. Nếu không, bạn sẽ chia nhỏ các ký tự thành các byte thành phần của chúng.
Ben Voigt

2

Bạn phải bao gồm sorthàm có trong algorithmtệp tiêu đề, là thư viện mẫu chuẩn trong c ++.

Cách sử dụng : 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;
}

ĐẦU RA:

abcd


1

Bạn có thể sử dụng hàm sort () . sort () tồn tại trong tệp tiêu đề thuật toán

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

Đầu ra:

achklors

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.