翻转字符串里面的单词
我觉得这道题是一道可以很好的帮助我们的理解再次关于快慢双指针,希望我们能够经过我们多次的锻炼来提高自己的水平!
题目
在知道题里面,我们要做的不仅仅是单纯的翻转字符我们还需要将这个空格整掉,但是在每一个单词与单词之间我们还要有一个空格,所以我们的第一步是先将这个空格全部删掉,然后利用reverse,然后再将每一个单词内部反转。
#include<iostream>
#include<algorithm>
using namespace std;
#include<string>
string zhauan(string& s,int start,int end)
{
for (int i =start,j=end; i < j; i++, j--)//这个地方千万别写错了,否则会影响下面的
{
swap(s[i], s[j]);
}
return s;
}
string shankong(string &s)
{
int slow = 0;
for (int fast = 0; fast < s.size(); fast++)
{
if (s[fast] != ' ')
{
if (slow != 0)s[slow++] = ' ';
while (fast < s.size() && s[fast] != ' ')
{
s[slow] = s[fast];
slow++;
fast++;
}
}
}
s.resize(slow);//这个地方的语法重点看一眼
return s;
}
string fanzhuan(string &s)
{
shankong(s);
//s.reserve(s.begin(),s.end());
zhauan(s,0,s.size()-1);
//cout << s << endl;
int start = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] != ' '||i==s.size()-1)//这个地方的判断条件别少了
{
zhauan(s, start, i-1);
start = i + 1;
}
}
return s;
}
int main()
{
string s;
getline(cin, s);
cout<<fanzhuan(s);
}
右旋字符串
#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
int main()
{
int n;
cin >> n;
string s;
cin >> s;
reverse(s.begin(), s.end());
reverse(s.begin(), s.begin() + n );
reverse(s.begin() + n, s.end());
cout << s;
}
标签:begin,slow,string,Day8,int,fast,右旋,字符串,include
From: https://blog.csdn.net/lxy2966201752/article/details/140084840