GEEK编程练习— —字符替换
2016-05-03 21:45
239 查看
题目
实现一个函数,把字符串中的每个空格替换成“%20”。输入
There are no spaces.
输出
There%20are%20no%20spaces.
分析
这是道题挺简单的,写出来是为了强调思路,有时候正着不行就得倒着来~首先,我们经常在网址中发现%20这样的字眼,这是因为在URL参数中含有特殊字符,如空格等,可能导致服务器无法获得正确的参数,所以要把特殊符号转换为服务器可识别的字符,转换规则是在%后面跟上ASCII码的两位十六进制的表示。空格的ASCII码是32,十六进制为0x20,所以被替换为%20。
其次,将长度为1的空格替换为长度为3的“%20”,字符串长度变长,而不是变短。
如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目一般就不会被拿来考试了。所以,一般情况考察的是在原先的字符串上进行操作,保证原字符串有足够长的空间来存放替换后的字符串。
如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么就从后往前进行替换。
1)遍历原字符串,找出字符串的长度以及其中的空格数量
2)根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。
3)设置两个指针p1和p2分别指向原字符串和新字符串的末尾位置。
4)如果p1指向内容不为空格,那么将内容赋值给p2指向的位置,
5)如果p1指向为空格,那么从p2开始赋值“02%”
6)直到p1==p2时表明字符串中的所有空格都已经替换完毕。
代码
#include<iostream> using namespace std; //length为字符串总容量 void ReplaceSpace(char str[], int length) { if (str == nullptr || length <= 0) return; int OldLength = 0; int BlankNum = 0; for (int i = 0; str[i] != '\0'; i++) { ++OldLength; if (' ' == str[i]) { BlankNum++; } } int NewLength = OldLength + 2 * BlankNum; if (NewLength > length) return; str[NewLength] = '\0'; int p1 = OldLength - 1, p2 = NewLength - 1; while(p1 >= 0 && p2 > p1) { if (str[p1] == ' ') { str[p2--] = '0'; str[p2--] = '2'; str[p2--] = '%'; } else str[p2--] = str[p1]; p1--; } } int main() { char str[50] = "There are no spaces"; cout << str << endl; ReplaceSpace(str, 50); cout << str << endl; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性