剑指OFFER刷题笔记
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
- 先遍历整个字符串,计算字符串的长度以及空格个数
- 计算新的字符串长度
- 检查新的字符串长度是否大于整个数组的最大长度
- 设置两个索引,一个指向当前长度的位置(index1),一个指向新的字符串的位置(index2)
- 两个字符串同时往前遍历
- 若index1的位置不是空格,赋值给index2的位置
- 若index1的位置是空格,index2往前移动两个并赋值”02%“
图解:
源码:
void replaceSpace(char *str,int length) {
if(str==nullptr||length<=0)
return;
int originalLength=0; //原始长度
int numberOfBlank=0; //空格个数
int i=0;
//当前字符串长度
while(str[i]!='\0')
{
++originalLength;
if(str[i]==' ')
++numberOfBlank;
++i;
}
//新字符串长达
int newLength=originalLength+numberOfBlank*2;
//检查是否大于数组容量
if(newLength>length)
return;
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal>=0 && indexOfNew>indexOfOriginal)
{
if(str[indexOfOriginal]==' ')
{
str[indexOfNew--]='0';
str[indexOfNew--]='2';
str[indexOfNew--]='%';
}else
{
str[indexOfNew--]=str[indexOfOriginal];
}
--indexOfOriginal;
}
}