1.题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2.问题分析
修改字符串的几个注意点:
- 如果字符串是内存中的常量区,我们使不允许修改的;
- 修改字符串我们要主要字符串的长度问题,不要越界;
- 字符串后面有一个’\0’标识符,我们需要复制。
程序的分析在代码注释里面,看源代码
3.代码
void replaceSpace(char *str,int length) {
if(str == NULL)
return;
//字符串长度
int len = 0;
//空格长度
int countSpace = 0;
//指向字符串首地址
char* p = str;
while(*p != '\0')
{
//统计字符串中空格长度
if(*p == ' ')
++countSpace;
//地址后移
++p;
//统计字符串长度
++len;
}
//新字符串长度
int realLen = len + 2 * countSpace;
//重新指向字符串首地址
p = str;
//从后向前替换字符串,注意我们需要把原字符串中的'\0'也拷贝到新的字符串中,所以从地址p + len开始
for(int i = len; i >= 0; --i)
{
if(*(p + i) != ' ')
*(p + realLen--) = *(p + i);
else
{
*(p + realLen--) = '0';
*(p + realLen--) = '2';
*(p + realLen--) = '%';
}
}
}