【华为机试】句子逆序

来源:互联网 发布:熟悉office办公软件 编辑:程序博客网 时间:2024/05/17 07:43

题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

输入描述:将一个英文语句以单词为单位逆序排放。

输出描述:得到逆序的句子

输入  I am a boy

输出  boy a am I

方法一分析:先把整个字符串反过来,在把每个单词反过来。

#include <iostream>#include <string>using namespace std;void reserve(string &s,int start,int end){int l = start, r = end;while (l < r)swap(s[l++], s[r--]);}int main(){string s;while (getline(cin, s)){if (s.empty()) continue;reserve(s,0,s.size()-1);int start = 0, end = 0;while (start<=end){while (s[end] != ' '){end++;if (s[end] == '\0') break;}reserve(s, start, end - 1);if (s[end] == '\0') break;start = ++end;}cout << s << endl;}return 0;}

方法二分析:遍历字符串,以单词和空格为单元,插入到结果字符串的前面;

#include <iostream>#include <string>using namespace std;int main(){string s;while (getline(cin, s)){int i = 0;string res;while (i < s.size()){if (s[i] == ' ') res.insert(res.begin(),s[i++]);else {string temp;  //temp用来保存单词;while (i<s.size()&&s[i] != ' ')  //注意有个i<s.size(),否则i会越界;temp += s[i++];res = temp + res;}}cout << res << endl;}return 0;}

原创粉丝点击