题目

Given an input string, reverse the string word by word.

For example,

Given s = "the sky is blue",

return "blue is sky the".

click to show clarification.

Clarification:

  • What constitutes a word?

    A sequence of non-space characters constitutes a word.
  • Could the input string contain leading or trailing spaces?

    Yes. However, your reversed string should not contain leading or trailing spaces.
  • How about multiple spaces between two words?

    Reduce them to a single space in the reversed string.

分析

(1) 去除首尾空格和去除字符串中多余的空格,计划用两个函数实现;
(2) 翻转整个字符串
(3) 依次将每个单词翻转

代码

#include <iostream>
#include <string>
#include <cwctype>
#include <vector> using namespace std; // 去除字符串首尾的空格
string& trim(string &s)
{
if(s.empty())
return s; string::iterator iter;
for(iter = s.begin(); iter != s.end()&& iswspace(*iter++););
s.erase(s.begin(),--iter); for(iter = s.end(); iter != s.begin()&& iswspace(*--iter););
s.erase(++iter,s.end()); return s;
} // 翻转字符串中的某一段子串
void reverseString(string &s, int begin, int end)
{
for(; begin < end; begin++,end--)
{
char temp = s[begin];
s[begin] = s[end];
s[end] = temp;
}
} // 删除单词之间多余的空格
void delete_mult_spaces(string &s)
{
string::iterator blank;
string::iterator iter = s.begin();
while(iter != s.end())
{
if(iswspace(*iter))
{
blank = iter + 1;
while(iswspace(*blank))
s.erase(blank);
iter = blank;
}
iter++;
}
} void reverseWords(string &s)
{
if (s.empty())
return; s = trim(s);
delete_mult_spaces(s); reverseString(s, 0, s.length()-1); int wbegin,wend;
wbegin = wend = 0;
for(size_t i = 0; i < s.length(); i++)
{
if(s[i] == ' ')
{
reverseString(s,wbegin,wend-1);
wbegin = wend + 1;
}
wend++; // deal with the last word
if(i == s.length()-1)
reverseString(s,wbegin,wend-1);
}
} int main()
{
vector<string> strs;
strs.push_back("the sky is blue");
strs.push_back(" the sky is blue");
strs.push_back("the sky is blue "); strs.push_back("the sky is blue");
strs.push_back(" the sky is blue ");
strs.push_back(""); vector<string>::iterator iter;
for(iter = strs.begin(); iter != strs.end(); iter++)
{
reverseWords(*iter);
cout << *iter << endl;
}
return 0;
}

参考


最新文章

  1. ReactJS入门(三)—— 顶层API
  2. 微信学习总结 09 解析接口中的消息创建时间CreateTime
  3. 【转】Struts1.x系列教程(7):Logic标签库
  4. springmvc学习第二天
  5. 【转】推荐一款Java反编译器,比较好用
  6. mongodb 操作类
  7. HDU 3045 Picnic Cows(斜率优化DP)
  8. JS调用android逻辑方法
  9. mysql数据修改-DEDE
  10. ArrayList源码剖析
  11. nat的翻译类型(2)--动态nat
  12. Node.js:上传文件,服务端如何获取文件上传进度
  13. LogHelper 日志记录帮助类
  14. python zip dict函数
  15. [spring boot] Table &#39;yhm.hibernate_sequence&#39; doesn&#39;t exist
  16. 高校表白APP-冲刺第三天
  17. PHP的json_encode()函数与JSON对象
  18. Codeforces Round #486 (Div. 3)-C. Equal Sums
  19. oracle数据库无法连接 The Network Adapter could not establish
  20. 【SVD、特征值分解、PCA关系】

热门文章

  1. 端口镜像&mdash;&mdash;配置原理篇
  2. 【转】Python查找某文件夹下的所有excel文件
  3. 修改Linux系统时间EDT改为CST
  4. java concurrent并发包使用
  5. jQuery正则校验
  6. 何为JavaScript原型?读完你就明白了
  7. python + selenium + unittest实现简单的UI自动化
  8. 【剑指offer】链表中的倒数第k个结点
  9. 深度学习-强化学习(RL)概述笔记
  10. sublime配置python环境及快捷键