class Solution {
public:
void reverseString(vector<char>& s) {
for(int i = 0, j = s.size() - 1;i < (s.size() - 1)/2;i++,j--){
swap(s[i],s[j]);
}; //注意这一题没有返回值
}
};
- 反转字符串II
class Solution {
public:
string reverseStr(string s, int k) {
for(int i = 0; i < s.size() - 1 ; i += (2*k)){ //for也是可以呈块状变化的,而不是单数增加,通过for的第三个条件
if(i + k <= s.size()){
reverse(s.begin() + i , s.begin() + i + k); //主要是你能不能想到这个reverse的条件
}
else{
reverse(s.begin() + i,s.end());
}
}
return s; //注意该题是有返回值的
}
};
- 替换数字
#include <iostream>
using namespace std;
int main(){
string s;
while(cin >> s){ //这道题的核心就是用什么机制去检测数字?
int ssize1 = s.size();
int count = 0;
for(int i = 0; i < ssize1 ;i++){
if(s[i] >= '0' && s[i] <= '9') //通过这种方式判断是否为数字,还是很巧妙的 //注意这里的数字要加引号,这代表着字符串中的数字
{
count++;
}
}
int ssize2 = ssize1 + count * 5; //注意字符串的扩容是通过resize
s.resize(ssize2);
for(int i = ssize1 , j = ssize2 ; i < j ; i-- , j--){ //注意替换的动作,应当是从后往前,否则每替换一次,后面剩下的就要同步往后扩容
if(s[i] >= '0' && s[i] <= '9'){
s[j] = 'r';
s[j - 1] = 'e';
s[j - 2] = 'b';
s[j - 3] = 'm';
s[j - 4] = 'u';
s[j - 5] = 'n';
j = j - 5;
}
else{
s[j] = s[i]; //别忘了处理非数字的类型
}
}
cout << s << endl;
}
}