码迷,mamicode.com
首页 > 其他好文 > 详细

剑指Offer——替换空格

时间:2017-10-26 16:59:53      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:空格替换   移动   长度   需要   空格   code   new   while   实现   

题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 

分析:

如果从前往后替换空格,那么每遇到一个空格就需要将还没遍历到的字符后移,总的移动步数将会很多。

所以我们考虑先求出替换空格之后的字符串的长度,再从后往前遍历进行替换,将会大大减少替换的次数,也不会覆盖还没遍历的字符。

 

代码:

 1 class Solution {
 2 public:
 3     void replaceSpace(char *str, int length) {
 4         int oldLength = strlen(str);    // 没替换前的字符串长度
 5         int newLength = oldLength;
 6         for(int i = 0; i < oldLength; i++) {  // 求出替换空格后的字符串长度
 7             if(str[i] ==  )
 8                 newLength += 2;
 9         }
10         if(newLength > length) return;  // 新长度超过限制的最长长度,则无法替换
11         while(oldLength >= 0 && newLength > oldLength) {    // 从后往前替换空格
12             if(str[oldLength] ==  ) {
13                 str[newLength--] = 0;
14                 str[newLength--] = 2;
15                 str[newLength--] = %;
16                 oldLength--;
17             } else {
18                 str[newLength--] = str[oldLength--];
19             }
20         }
21     }
22 };

 

剑指Offer——替换空格

标签:空格替换   移动   长度   需要   空格   code   new   while   实现   

原文地址:http://www.cnblogs.com/yjcheng1314/p/7737499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!