替换字符串(以替换空格为例)
来源:互联网 发布:mac os 下载速度慢 编辑:程序博客网 时间:2024/06/14 03:52
题目:请实现一个函数,把字符串的每个空格替换成”%20”,例如,输入”We are happy.”,则输出”We %20are%20happy”.
/***测试用例格式*{一个空格, 多个空格, 没有空格}字符串{一个空格, 多个空格, 没有空格}字符串{一个空格, 多个空格, 没有空格}*注意size_type类型是无符号类型,std::string::nps的值是size_type持有的最大正值*注意不要将负数复制给无符号的类型,那样会把对应的负数转化为无符号数而导致错误的发生*/#include <string>#include <algorithm>#include <iostream>//method 1void replaceBlank_1(std::string& target_str, const std::string& orgin_str, const std::string& target = "%20"){ typedef std::string::size_type sz_type; sz_type pos, pre_pos = std::string::npos; //std::cout << "pre_pos1: " << pre_pos << std::endl; sz_type i = 0; //查找最后一个空格的位置 pos = orgin_str.find_last_of(' ', pre_pos); //若原字符串中有空格字符串 if (pos != std::string::npos) { while ( pos != std::string::npos) { std::string sub_str = target+ orgin_str.substr(pos+1, pre_pos-pos); std::copy(sub_str.begin(), sub_str.end(), std::inserter(target_str, target_str.begin())); //pre_pos 的类型为无符号类型,当pos-1小于0时pre_pos值为对应负数转化的无符号整数 pre_pos = pos-1; if (pre_pos == std::string::npos) { // std::cout << "pre_pos2: " << pre_pos << std::endl; break; } pos = orgin_str.find_last_of(' ', pre_pos); } if (pre_pos != std::string::npos) target_str.insert(target_str.begin(), orgin_str.begin(), orgin_str.begin()+pre_pos+1); } else { target_str = orgin_str; }}//method2void replaceBlank_2(std::string& orgin_str, const std::string& target = "%20"){ typedef std::string::size_type sz_type; sz_type pos = std::string::npos; while ((pos = orgin_str.find_last_of(' ', pos)) != std::string::npos) { orgin_str.replace(pos, 1, target); --pos; }}//metod3 剑指offer中的方法 时间复杂度O(n)void replaceBlank_3(std::string& orgin_str, const std::string& target= "%20"){ typedef std::string::size_type sz_type; sz_type space_numbers = 0; sz_type length = orgin_str.size(); //统计空格的个数 for (sz_type i = 0; i < length; i++) { if (orgin_str[i] == ' ') ++space_numbers; } orgin_str.resize(length+space_numbers*2, ' '); sz_type p2 = orgin_str.size()-1; sz_type p1 = length-1; // std::cout << "p2 : " << p2 << std::endl; // std::cout << "p1 : " << p1 << std::endl; while (p1 != std::string::npos && p2 > p1) {// std::cout << "p1 : " << p1 << std::endl; if (orgin_str[p1] == ' ') { for (sz_type i = target.size()-1; i != std::string::npos ; i--) orgin_str[p2--] = target[i]; } else { orgin_str[p2--] = orgin_str[p1]; } --p1; }}/**测试用例格式*{一个空格, 多个空格, 没有空格}字符串{一个空格, 多个空格, 没有空格}字符串{一个空格, 多个空格, 没有空格}*/int main(){ std::string orgin_str = "we are happy."; std::cout << "orgin_str: " << orgin_str << std::endl; // std::string target_str; //replaceBlank_1(target_str, orgin_str); //std::cout << "target_str: " << target_str << std::endl; //replaceBlank_2(orgin_str); replaceBlank_3(orgin_str); std::cout << "target_str: " << orgin_str << std::endl; return 0;}
阅读全文
0 0
- 替换字符串(以替换空格为例)
- 替换空格(将字符串中的空格替换为20%)
- 替换空格(字符串)
- 剑指offer面试题:替换空格(将字符串每个空格替换为%20)
- 《剑指Offer》替换空格(将字符串中的空格替换为%20)
- 《剑指Offer》替换空格(将字符串中的空格替换为%20)
- 字符串中空格替换为%20(算法)
- 1.5-替换字符串中的空格为%20
- 将字符串中的空格替换为“20%”
- 替换字符串中的空格为%20--20150925
- 把字符串中空格替换为"%20"
- 替换字符串中的空格为%20
- 把字符串中的空格替换为"%20"
- 替换字符串中的空格为其他字符
- 将字符串中的空格替换为%20
- 剑指offer-字符串空格替换为“ ”
- 替换字符串中空格为%20
- 将字符串中的空格替换为“%20”
- C_函数传参归纳
- bootstrap分页模板
- Linux centOS7 开机设置进入命令行
- error -5008: intel64 or amd64 must be specified in the template of the summary
- 微课堂v2 2.1.3最新官方微赞微擎原版解密开源版破解在线教育通用功能模块掌上教育专家
- 替换字符串(以替换空格为例)
- c3p0工具jdbcutils工具类模板
- 封装OkHttp
- (Slide)Attention Mechanism注意力机制
- zynq的pl中断在linux下的配置及中断驱动
- BASE64 编码规则
- 分页查询产品信息案例;第一步:创建产品页面,向服务器发送请求(获取所有产品信息)
- ubuntu查看opencv版本
- JavaScript学习笔记_ReactRouter使用教程