有人能解释一下第10行到底在做什么吗? “反转(s.begin()+j, s.begin()+i);”

问题描述 投票:0回答:1

这是一个 leetcode 问题,我们必须反转字符串。这是问题的链接。 反转字符串中的单词

这是我想理解的代码片段:

class Solution {
public:
    string reverseWords(string s) {
        int n=s.length();
        reverse(s.begin(), s.end());
        s.push_back(' ');
        int j=0;
        for(int i=0; i<=n; i++){
            if(s[i]==' '){
                reverse(s.begin()+j, s.begin()+i);
                j=i+1;
            }
        }
        s.pop_back();
        return s;
    }
};

我很期待这个功能是如何工作的。

c++
1个回答
0
投票

reverse(s.begin() + j, s.begin() + i)
在位置
j
i
之间翻转部分字符串中的字符。例如,如果字符串是
"dlrow olleh "
并且我们从
j = 0
反转到
i = 5
,它将把第一个单词
"dlrow"
反转为
"world"
。它通过交换第一个和最后一个字母,然后交换下一对字母,依此类推,直到整个单词被翻转来实现这一点。此后,单词
"dlrow"
变为
"world"
,而字符串的其余部分保持不变。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.