题目:给定一个字符串,逐个翻转字符串中的每个单词。
说明
- 单词的构成:无空格字母构成一个单词
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
解:先将整个字符串反转,再将每个单词再反转,处理好空格,就是正确结果。
class Solution { public: /* * @param s: A string * @return: A string */ string reverseWords(string &s) { // write your code here string res; if(s.empty()) return s; reverse(s.begin(),s.end());//将整个字符串反转 char *stoc= const_cast<char*>(s.data());//将string转char*。先将string转const char*再转char* char *tmpStr = strtok(stoc," "); while (tmpStr != NULL) //通过空格将字符串分割成多个单词 { if(tmpStr!=" ") { string temp=(string)tmpStr; reverse(temp.begin(),temp.end());//再将单词反转 res.append(" "); res.append(temp);//res最后的格式:空格+单词A+空格+单词B } tmpStr = strtok(NULL, " "); } //删除开头的空格 if(!res.empty()) { res.erase(0,res.find_first_not_of(" ")); } return res; } };