01反转字符串
//2024.2.6
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void reverse_string1(string::iterator begin, string::iterator end){
end--;
while(begin < end){
swap(*begin, *end);
begin++;
end--;
}
}
string reverse_string2(string& s, int k){
for(int i = 0; i < s.size(); i += (2 * k)){
if(i + k <= s.size()){
reverse_string1(s.begin() + i, s.begin() + i + k);
continue;
}
reverse_string1(s.begin() + i, s.begin() + s.size());
}
return s;
}
int main(){
string s = "mlnvshdhfjhg";
reverse_string2(s, 4);
cout << s << endl;
}
02反转字符串里的单词
//2024.2.6
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
//去除多余空格
string remove_space(string& s){
int slow = 0, fast = 0;
//去除前面的空格
while(s.size() > 0 && fast < s.size() && s[fast] == ' '){
fast++;
}
//去除中间的空格
for(;fast < s.size(); fast++){
if(fast - 1 > 0 && s[fast] == s[fast - 1] && s[fast] == ' '){
continue;
}else{
s[slow++] = s[fast];
}
}
if(s[slow - 1] == ' ' && slow - 1 > 0){
s.resize(slow - 1);
}else{
s.resize(slow);
}
return s;
}
string rever_string(string& s){
remove_space(s);
reverse(s.begin(), s.end());
int start = 0, end = 0;
bool entry = false;
for(int i = 0; i < s.size(); i++){
if((!entry) || (s[i] != ' ' && s[i - 1] == ' ')){
start = i;
entry = true;
}
if(entry && s[i] == ' ' && s[i - 1] != ' '){
end = i;
entry = false;
reverse(s.begin() + start, s.begin() + end);
}
if(entry && (i == (s.size() - 1)) && s[i] != ' '){
end = i + 1;
entry = false;
reverse(s.begin() + start, s.begin() + end);
}
}
return s;
}
int main(){
string s = " I am a student! ";
cout << rever_string(s);
}