题目:
请实现一个函数,把字符串中的每个空格替换成”%20”,例如输入”we are happy”,则输出”we%20are%20happy”。
可以使用这样的方法:
先遍历一遍字符串,求出字符串中空格的个数,由此,可以计算出替换之后的字符串的总长度,然后标记出字符串的末尾p1和替换之后的末尾p2。
再逐步往前移动p1,p2,同时将p1数据复制到p2的位置中,如果p1指向了一个空格,则将p1往前移动一格,p2的位置依次插入’0’ ‘2’ ‘%’并往前移动。
当空格替换完,p1与p2会到达同一位置。此算法时间复杂度o(n)。
void ReplaceBlack(char *string,int len)
{
if(string == NULL||len < 1)
{
return;
}
int count = 0;
int strlength = 0;
for(int i=0;string[i] != '\0';++i)
{
++ strlength;
if(string[i] == ' ')
{
++ count;
}
}
int newlength = strlength + count * 2;
if(len < newlength)
{
return;
}
int indexoriginal = strlength + 1;
int indexnewlen = newlength + 1;
//不要在语句内比较时执行 indexoriginal-- 操作
while(indexoriginal >= 0 && indexoriginal < indexnewlen)
{
if(string[indexoriginal] == ' ')
{
string[indexnewlen--] = '0';
string[indexnewlen--] = '2';
string[indexnewlen--] = '%';
}
else
{
string[indexnewlen--] = string[indexoriginal];
}
indexoriginal --;
}
}