首先, 介绍亿下replace()
函数:
string replace (size_t pos, size_t len, const string& str);
我们可以使用这个模版替换字符串中第一次出现某子字符串:
str.replace(str.find(substr), 1, newstr)
别问为啥第二个是1
,毕竟我也不知道
Code:
class Solution {
public:
string replaceSpaces(string &str) {
str.replace(str.find(" "), 1, "%20");
return str;
}
};
Output:
We%20are happy.
一个replace()
函数当然只能替换1个空格, 所以我们可以重复str.length()
次replace()
:
class Solution {
public:
string replaceSpaces(string &str) {
int n = str.length();
while(n--){
str.replace(str.find(" "), 1, "%20");
}
return str;
}
};
恭喜你, 获得了一个Runtime Error
原因: std::out_of_range
字符串里有2个空格, 替换到第3次时会返回__pos
, 当然就out了^~^
我们可以加个try-catch
(糕手砖用):
Code:
class Solution {
public:
string replaceSpaces(string &str) {
int n = str.length();
while(n--){
try {
str.replace(str.find(" "), 1, "%20");
} catch(std::out_of_range &){
break;
} catch(...){}
}
return str;
}
};
AC