我们拿到这样一道题的时候最简单的方法是当字符串遇到空格时我们将空格替换为百分之20,但是空格是一个字符,而我们所要替换的%20为三个字符,这样如果我们有俩个空格我们就要把字符移动俩次,这样从效率上来说并不是很高。
所以我们想到可以计算出替换后字符串的长度,创建一个辅助空间让字符一个一个移动到新建的空间上来,这样虽然创建了辅助空间但是从效率上来说就比前一种方法好的很多
#include<stdio.h>
void my_replaceBlank(char string[], int len)
{
int originallen = 0;//原字符串长度
int originalblank = 0;//原字符串空格
int newstringlen = 0;//新字符串长度
int oror = 0;//源字符串最后一个字符下标
int ornew = 0;//新字符串最后一个字符下标
int i = 0;
if((string == NULL) && len <= 0)
{
return ;
}
while(string[i] != '\0')
{
originallen++;
if(string[i] == ' ')
{
originalblank++;//统计有多少空格
}
i++;
}
newstringlen = originallen + originalblank * 2;//每多一个空格新字符串长度应该多加2
oror = originallen;
ornew = newstringlen;
while((oror >= 0) && (ornew > oror))
{
if(string[oror] == ' ')
{
string[ornew--] = '0';
string[ornew--] = '2';
string[ornew--] = '%';
}
else
{
string[ornew--] = string[oror];
}
oror--;
}
}
int main()
{
char str[20] = "we are happy";
int sz = sizeof(str)/sizeof(str[0]);
my_replaceBlank(str, sz);
printf("%s",str);
return 0;
}