剑指offer——字符串替换空格
2017-03-29 22:31
351 查看
题目描述:实现一个函数,把字符串中的每个空格替换成“%20”,例如,输入“we are happy”,输出”we%20are%20happy.”
见到这个题目,我们很容易想到:
由此,我们可以想到如下方法:
(1)先遍历一次字符串,统计出字符串中空格的总数,并可以由此计算出替换之后字符串总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。(2)然后从后往前开始复制替换。首先准备两个指针,p1和p2,p1指向原始字符串的末尾,p2指向那个替换后字符串的末尾,接下来向前移动指针p1,逐个复制它指向的字符到p2所指的位置,遇到空格的话,p1向前移动一个,p2插入“%20”,p2向前移动三个。(3)遇到下一个空格,重复上述过程,等到p1与p2指向同一位置时,表明替换完成。
代码实现如下:
见到这个题目,我们很容易想到:
//申请一块新空间,存储变化后的字符串,显然不是我们想要的结果 char* Replace(char* array) { char temp[100] = {0}; int i = 0; for(int idx=0; array[idx]!='\0'; ++idx) { if(array[idx] == ' ') { temp[i++] = '%'; temp[i++] = '2'; temp[i++] = '0'; } else { temp[i] = array[idx]; i++; } } temp[i] = '\0'; return temp; }
由此,我们可以想到如下方法:
(1)先遍历一次字符串,统计出字符串中空格的总数,并可以由此计算出替换之后字符串总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。(2)然后从后往前开始复制替换。首先准备两个指针,p1和p2,p1指向原始字符串的末尾,p2指向那个替换后字符串的末尾,接下来向前移动指针p1,逐个复制它指向的字符到p2所指的位置,遇到空格的话,p1向前移动一个,p2插入“%20”,p2向前移动三个。(3)遇到下一个空格,重复上述过程,等到p1与p2指向同一位置时,表明替换完成。
代码实现如下:
#include<iostream> using namespace std; void ReplaceBlank(char string[], int length) { if(string == NULL && length <= 0) { return; } int originLength = 0; //字符串实际长度 int numberofBlank = 0; int index = 0; while(string[index]) { ++originLength; if(string[index] == ' ') { ++numberofBlank; } ++index; } int newLength = originLength + numberofBlank*2; //替换后字符串长度 if(newLength > length) { return; } int indexofOrigin = originLength; int indexofNew = newLength; while(indexofOrigin >= 0 && indexofNew > indexofOrigin) { if(string[indexofOrigin] == ' ') { string[indexofNew--] = '0'; string[indexofNew--] = '2'; string[indexofNew--] = '%'; } else { string[indexofNew--] = string[indexofOrigin]; } --indexofOrigin; } } void FunTest() { char array[100] = "we are happy"; ReplaceBlank(array, 20); for(int idx=0; array[idx]!='\0'; idx++) { cout<<array[idx]; } cout<<endl; } int main() { FunTest(); system("pause"); return 0; }
相关文章推荐
- 【剑指offer】实现一个函数来替换字符串中的空格
- 【剑指offer】替换字符串中的空格
- 剑指offer面试题4:替换字符串中的空格
- [剑指offer][面试题04]实现一个函数,将字符串中的空格替换为“ ”.例如输入“we are happy.”,输出"we are happy.".
- 剑指offer-02-将一个字符串中的空格替换成“%20”
- 剑指Offer之字符串空格替换问题
- 【剑指offer】替换字符串中的空格
- 剑指offer 面试题4—替换字符串中空格
- 剑指offer 2.3 数据结构4-替换字符串中的空格
- 剑指Offer——字符串空格替换
- 剑指offer 替换字符串中的空格
- 【剑指offer】字符串中空格的替换
- 【剑指offer】字符串的空格替换
- 剑指offer-04:字符串替换空格
- 【剑指offer】将空格替换制定字符串
- 剑指offer-字符串空格替换为“ ”
- 剑指offer 1,输入一个字符串,将字符串的空格替换成%20
- 剑指offer剖析__空格替换字符串问题
- C++笔试题(剑指offer 面试题4 替换字符串中的空格)
- 【剑指offer】替换字符串中的空格_04