题:
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. ,经过函数后变为:beijing. like I
也就是将一段话句子倒置,句子中每个单词倒置,,标点不倒置。
解题思路:
看到倒置二字,首先想到的是 String类 中的 reverse函数,能够简单快捷的倒置字符串,同时通过递归调用,每个单词也使用reverse函数 来倒置,从而实现单词的倒置,完成题目要求。
代码实例:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
//1.输入字符串
getline(cin, s);
//2.句子倒置
reverse(s.begin(), s.end());
//3.单词倒置
//倒置的判断条件:1.单词开始等于最后 2.遇到空格
auto start = s.begin();
//关键:找到单词的end
while (start!=s.end()) {
auto end = start;
while (end!=s.end()&& *end!=' ') {
end++; //找到end
}
reverse(start, end); //反转一个单词了
//移动start,再次继续倒置第二个
if (end!=s.end()) {
start = end + 1;
}
else {
start = end;
}
}
//4.打印倒置后的字符串
cout << s << endl;
system("pause");
return 0;
}
知识点总结:
- String类的使用——begin(),end(),reverse()函数
- 注意:end(),begin(),代表的是指针,代码中判定空格时候:*end != ' ',可见end();begin() 是指针
- 输入有空格字符串 getline() 函数的使用