前言
字符串相关题目记录
反转字符串1
class Solution {
public:void reverseString(vector<char>& s) {int l,r;l = 0;r = s.size()-1;while(r>l){s[l] ^= s[r];s[r]^=s[l];s[l]^=s[r];l++;r--;}}
};
反转字符串2
class Solution {
public:void myreverse(string&s, int l, int r){while(r>l){swap(s[l], s[r]);r--;l++;}}string reverseStr(string s, int k) {int l,r;int len = s.size();for(int i =0 ;i<len;i+=2*k){if(i+k-1<len){l = i;r = i+k-1;myreverse(s,l, r);}else{l = i;r = len-1;myreverse(s,l,r);}}return s;}
};
替换数字
#include<iostream>
#include<string>
using namespace std;
int main(){string s = "";cin>> s;int cnt = 0;int l = s.size() - 1;for(int i = 0; i<s.size();i++){if(s[i]-'0'>=0 &&s[i]-'0'<=9){cnt++;}}for(int i =0; i<cnt;i++){s+=" ";}int r = s.size() - 1;while(l>=0){if(s[l]>='a' && s[r]<='z'){s[r--] = s[l];l--;}else{s[r--] = 'r';s[r--] = 'e';s[r--] = 'b';s[r--] = 'm';s[r--] = 'u';s[r--] = 'n';l--;}}cout<<s;}
翻转字符串里的单词
class Solution {
public:void myreverse(string&s, int l, int r){while(r>l){swap(s[l], s[r]);l++;r--;}}string reverseWords(string s) {// 去除多余空格int fast = 0,slow = 0;while(s[fast]==' '){fast++;}while(fast<s.size()){if(s[fast]!=' '){s[slow] = s[fast];slow++;fast++;}else if(fast>0 && fast<s.size() -1&& s[fast] == ' '&& s[fast+1]!=' '){s[slow] = s[fast];slow++;fast++;}else{fast++;}}s.resize(slow);// cout<<s;//提取完毕myreverse(s, 0, s.size()-1);int l = 0,r = 0;while(r<s.size()){if(r == s.size()-1) myreverse(s,l,r);if(s[r]!=' ') r++;else{myreverse(s,l,r-1);l = r+1;r = r+1;}}return s;}
};
右旋字符串
#include<iostream>
#include<string>
using namespace std;
void myreverse(string &s, int l, int r){while(r>l){swap(s[l], s[r]);l++;r--;}
}
int main(){int k;cin>>k;string s;cin>>s;myreverse(s,0,s.size()-1);int l =0, r = k-1;myreverse(s, l, r);myreverse(s, r+1, s.size() - 1);cout<<s;
}