倒置字符串
题目描述
题目链接:倒置字符串
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入输出示例及描述
输入输出描述
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
数据范围
依次输出倒置之后的字符串,以空格分割
示例1
输入:
I like beijing.
输出:
beijing. like I
解题思路及源码
思路:
方法一:先将整个字符串逆置过来,再遍历字符串,找出每个单词,对单词逆置
方法二:直接利用cin>>s接收输入,遇到空格就结束了,自然就分割开了每个单词,其次将每次接收到的单词拼接到之前串的前面就逆置过来了
解法一:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void solution(string& s)
{
//将整个字符串逆置
reverse(s.begin(), s.end());
int right=0, left=0;
while ((right = s.find(' ', left+1)) != string::npos)
{
//第一个小串特殊处理,其他正常逆置
if (left == 0)
reverse(s.begin() + left, s.begin() + right);
else
reverse(s.begin()+left+1,s.begin()+right);
left = right;
}
//最后一个小串单个处理
right = s.size();
if ((left = s.rfind(' ', right)) == string::npos)
reverse(s.begin(), s.end());
else
reverse(s.begin() + left + 1, s.begin() + right);
// 输出处理结果
cout << s << endl;
}
int main()
{
string s;
getline(cin, s);
solution(s);
return 0;
}
解法二
#include <iostream>
#include <string>
using namespace std;
// cin读取string时自动会被空格分隔开,用另一个字符串存储进行逆序输出
int main()
{
string s1, s2;
cin >> s2;
while (cin >> s1)
s2 = s1 + " " + s2;
cout << s2 << endl;
return 0;
}