您的位置:首页 > Web前端

《剑指offer》——替换空格

2015-12-14 19:40 459 查看
题目:

请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy. ”,则输出“We%20are%20happy.”。

分析与解法:



void replaceSpace(char *str, int length)
{
if(str == NULL || length <= 0)
return;

int num = 0;//空格数
//strlen()计算字符串长度,直到遇到结束符'\0',返回的长度大小不包括'\0'
for(int i = 0; i < strlen(str); i++)
{
if(str[i] == ' ')
++num;
}

if(strlen(str) + num * 2 + 1 > length)
return;

char *p1, *p2;
p1 = str + strlen(str);//指向原始字符串末尾
p2 = str + strlen(str) + num * 2;//指向替换后字符串末尾
while(p1 != p2)//当指向同一个元素时,复制结束
{
if(*p1 != ' ')
{
*p2 = *p1;
--p1;
--p2;
}
else
{
--p1;
*p2 = '0';
--p2;
*p2 = '2';
--p2;
*p2 = '%';
--p2;
}
}
}


Tips:

合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,可以考虑从后往前复制,这样可以减少移动的次数提高效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: