有没有办法使用STL对子字符串进行排序?
我知道我可以做到这一点。
std::string word="dcba";
std::sort(word.begin(), word.end());
但是如何获得任意索引的迭代器?
例如 - 如果我想从索引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;
}
答案 0 :(得分:3)
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));