使用STL对子字符串进行排序

时间:2016-09-14 15:43:26

标签: c++ string stl

有没有办法使用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;
}

1 个答案:

答案 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));