题目:翻转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
题目解析:
- 本题目中与直接翻转不同的是:以空格为分界符,对每个单词进行单独的顺序反转;
- 需要注意的是,在string类型中,判断其中的字符是否为空格,不能采用s[i]==" "的形式,要使用ctype.h中的isspace(s[i])来进行判断;
- 同时,C++中判断string类型的字符串是否结束,并不是使用'\0'的形式(字符串数组是),我们采用判断当前i是否等于字符串长度来判断结束。
代码:
#include <iostream> #include<algorithm> #include<string.h> #include<ctype.h> using namespace std; class Solution{ public: string reverseWords(string s){ int i=-1; //当前坐标 int begin_s=0; //字符串中单词的开始坐标 while(i!=s.size()) {++i; if(isspace(s[i])||i==s.size()) { reverse(s.begin()+begin_s,s.begin()+i); //begin_s与i-1之间为整个单词 begin_s=i+1; } } return s; } }; int main() { Solution f; cout << f.reverseWords("abc efg") << endl; return 0; }
结果截图:
原字符串:"abc efg"
题目链接:
https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/