54. 替换数字(第八期模拟笔试) (kamacoder.com)
刚开始甚至卡在了数字和字母怎么区分:if in ‘0’~‘9’
注意:1.是‘0’而不是0,0是一个int,而‘0’的ASCALL不是0,所以注意s[i] >= '0' && s[i] <= '9'
2.这个双指针很巧妙,从后往前补数据,一个是旧数组的索引个,一个是新的,效果与开了一个新数组一样
其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
p.s.
处理字符串,一般会定义一个string类型。
回想双指针法:
#include <iostream>
using namespace std;
int main(){
//a1b2c3
string s;
cin >> s;
int old = s.size()-1;
int count = 0;//数字个数
for(int i = 0;i<s.size();i++){
if(s[i] >= '0' && s[i] <= '9'){
count++;
}
}
s.resize(s.size() + count * 5);
int newI = s.size()-1;
while(old>=0){
if(s[old]>='0' && s[old]<='9'){
s[newI--]='r';
s[newI--]='e';
s[newI--]='b';
s[newI--]='m';
s[newI--]='u';
s[newI--]='n';
old--;
}else{
s[newI--] = s[old--];
}
}
cout<<s<<endl;
return 0;
}