剑指Offer-2-替换空格

题目描述

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

相关函数

1
2
3
4
5
strlen(); 计算字符串长度,返回长度不包括结束符\0,仅为字符个数
====================================================
常用的字符串初始化格式
char str[100] = "We are happy.";
int length = strlen(str);

解题思路

  先遍历次字符串, 统计出字符串中空格的总数,由此计算出替换之后的字符串的总长度。每替换个空格, 长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。我们还是以前面的字符串"We are happy."为例,"We are happy."这个字符串的长度是13(不包括结尾符号’\0’),里面有两个空格,因此替换之后字符串的长度是17。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
//length表示的是非结束符的字符个数
void replaceSpace(char *str,int length) {
//统计空格数
int i,count=0;
for(i=0;i<length;i++){
if(str[i]==' ')
count++;
}
//注:length是包括字符串结束符\0的长度的
int newLen = length+2*count;
str[newLen--] = '\0';
for(i=length-1 ;i >= 0; i--){
if(str[i] == ' '){
str[newLen--] = '0';
str[newLen--] = '2';
str[newLen--] = '%';
if(--count==0)
break;
}else
str[newLen--] = str[i];
}
}
};

----\(˙<>˙)/----赞赏一下吧~