【剑指 Offer】05,替换字符创中的空格;难度等级:简单。
文章目录
- 一、题目
- 二、题目背景
- 三、我的解答
- 四、易错点
- 五、知识点:char 和 string 类型的转换
一、题目
二、题目背景
在网络编程中,如果 URL 参数中含有特殊字符,如空格、#等,则可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。
转换的规则是在%后面跟上ASCII码的两位十六进制的表示,比如:
空格 的ASCI码是32,即十六进制的0x20,因此空格被替换成"%20"
'#'的ASCII码为35,即十六进制的0x23,它在URI中被替换为"%23"。
三、我的解答
基础答案:
class Solution {
public:
string replaceSpace(string s) {
string s_new;
for(auto a:s){
if(a==' ')
s_new+="%20";
else
s_new+=a;
}
return s_new;
}
};
进阶语法(使用三目运算符替换 if - else 语句)
class Solution {
public:
string replaceSpace(string s) {
string s_new;
for(auto iter:s){
string iter_str(1,iter);
s_new+=(iter==' ') ? "%20":iter_str;
}
return s_new;
}
};
执行结果:
执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户
内存消耗:6 MB, 在所有 C++ 提交中击败了 81.92% 的用户
四、易错点
在进阶语法中,直接写成下面的格式会编译报错:
class Solution {
public:
string replaceSpace(string s) {
string s_new;
for(auto iter:s)
s_new+=(iter==' ') ? "%20":iter;
return s_new;
}
};
报错大意是 “%20” 是 string 类型 ,而 iter 是 char 类型,二者不一致。因此需要将 iter 转化为 string 类型。
五、知识点:char 和 string 类型的转换
直接使用 string(iter) 是错误的,因为 string类 没有 string( char c) 这样的构造函数。正确的构造函数是:
string(size_t n, char c); // 使用 n 个字符 'c' 初始化string对象
所以我们使用 string iter_str (1, iter) 将 char 类型的 iter 转换为 string 类型的 iter_str
还有其他几种将 char 转换为 string 的方法可参考博客 c++转换char为string的几种方式