题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
1. 思想
第一种 手动处理,用于锻炼
- 思路一:创建一个新的字符串,然后用 wpos 和 rpos 两个指针来复制数据。
- 思路二:利用 string 的 push_back 函数直接在新字符串末尾追加。、
第二种,利用标准库函数,可能更适用于真实环境
C++ 标准库没有提供替换字符串的功能。只有算法库中的 replace 函数可以替换字符。
boost 库里面提供了字符串替换功能。
2. 算法代码
- 第一种,手动处理
string replaceSpace(string s) {
size_t cnt = 0;
int wpos, rpos;
for(size_t i=0; i<s.length(); ++i){
if(s[i]==' ')
++cnt;
}
string ans(s.length()+2*cnt, ' ');
wpos = ans.length()-1, rpos = s.length()-1;
while(rpos>=0 && wpos>rpos){
if(s[rpos]==' '){
ans[wpos] = '0';
ans[wpos-1] = '2';
ans[wpos-2] = '%';
wpos -= 3;
}else{
ans[wpos] = s[rpos];
--wpos;
}
--rpos;
}
copy(s.begin(), s.begin()+rpos+1, ans.begin());
return ans;
}
- 第二种,使用C++ 标准库,不断地找出需要替换的 oldstr 位置,并该位置替换成
string replaceSpace(string s) {
size_t p;
while((p=s.find(' '))!=string::npos){
s.replace(p, 1, "%20");
}
return s;
}