2012-02-02 95 views
55

如果我有一個字符串是否有一個內置函數來排序字符或我會寫我自己的?排序字符的C + +字符串

例如:

string word = "dabc"; 

我想改變它,以便:

string sortedWord = "abcd"; 

也許使用字符是一個更好的選擇?我將如何在C++中執行此操作?

+7

什麼'性病:: sort'? – dreamlax 2012-02-02 05:21:38

+0

請注意,任何種類的基於幼稚字符值的排序都會以UTF-8爲基礎 - 取決於您想要考慮語言環境的字符串。 – 2017-11-17 10:44:06

回答

101

有一個在標準庫a sorting algorithm,在報頭中<algorithm>。它排序,所以如果你做了以下,你的原始單詞將被分類。

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

如果您不想丟失原件,請先複印一份。

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

謝謝,我現在覺得很蠢,太多的PHP ... – gprime 2012-02-02 06:28:37

+0

如果我們想讓字符串按遞增順序排序呢? – madhuspot 2017-06-16 14:09:33

+2

默認情況下,@madhuspot'std :: sort'按字母順序遞增排序。假設這是一個小錯字,並且你想要壓縮命令,可以使用'std :: sort'版本,它將'Compare'作爲它的第三個參數,並提供'std :: greater'而不是默認的'std :: less'。 'std :: string'默認使用'char'類型,例如'std :: sort(sortedWord.begin(),sortedWord)。end(),std :: greater ());' - 這會在原始問題中給出「dcba」的結果而不是「abcd」。 – Tommy 2017-07-10 00:19:36

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

here參見

+10

這是最好的方法......如果字符串使用單字節編碼。否則,您會將字符分解爲其組件字節。 – 2012-02-02 05:34:27

+0

@BenVoigt:優點! – dreamlax 2012-02-02 05:36:38

1

你必須包括sort函數,它是在algorithm頭文件是在C++ standard template library

用法: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; 
} 

OUTPUT:

abcd

0

可以使用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

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

如何將在內部執行,請解釋邏輯

+0

我不理解你的評論「如何執行內部請解釋邏輯」。 – 2017-11-17 10:39:34