2016-09-14 62 views
0

有什麼方法可以使用STL排序子字符串?使用STL對子字符串排序

我知道我可以做到這一點。

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

但是,如何獲得任意索引的迭代器?

EG-如果我想從指數排序爲2〜4,「DCAB」

編輯 - 這是需要一個函數來從給定的字符串中的下辭書序列。

bool nextLex(string s) { 
    for(int i=s.length()-1;i>=0;i--) { 
     for(int j=i-1;j>=0;j--) { 
      if(s[j]<s[i]) { 
       swap(s[i],s[j]); 
       sort(s.begin()+j,s.end()); 
       cout<<s<<endl; 
       return true; 
      } 
     } 
    } 
return false; 
} 
+1

word.begin()+ 2,word.begin()+ 4。不要忘記檢查大小 – Danh

+1

你可以看看'std :: next_permutation'你的下一個詞典序列。 [Demo](https://ideone.com/M2Z5MT) – Jarod42

回答

2

std::string使用隨機訪問迭代器,所以可以簡單的索引添加到begin迭代器:

std::string word="dcba"; 
std::sort(word.begin()+2, word.begin()+4); 

或者,你可以使用std::advance()

std::string word="dcba"; 

std::string::iterator start = word.begin(); 
std::advance(start, 2); 

std::string::iterator end = start; 
std::advance(end, 2); 

std::sort(start, end); 

另外,您可以使用std::next()(C++ 11及更高版本):

std::string word="dcba"; 
std::sort(std::next(word.begin(), 2), std::next(word.begin(), 4)); 

或者:

std::string word="dcba"; 
auto start = std::next(word.begin(), 2); 
std::sort(start, std::next(start, 2)); 
+0

謝謝!這看起來很有效。雖然我的代碼似乎還沒有做它應該做的。我編輯了原始問題,請介意查看一下嗎? – Metafity