企业网站及信息化建设营销型网站重要特点是
【剑指 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";elses_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的几种方式