题目:Write a method to replace all spaces in a string with '%20'.You may assume that the string has sufficient space at the end of the string to hold the additional characters,and that you are given the "true" length of the string.(Note:if implementing in Java,please use a character array so that you can perform this operation in place.)
EXAMPLE
Input: "Mr John Smith "
Output:"Mr%20John%Smith"
写一个方法用'%20'替换字符串中的所有空格。你需要确保字符串有足够的空间来存储额外的字符,你被给与字符串的真实长度。(注意:如果用 Java 实现,请使用 character array 这样你可以执行这个操作。)
解题思路
首先按照题目意思是将空格替换为'%20',但按照题目给的示例字符串末尾的空格并没有转换成'%20'。我们这里还是按照将所有空格都转换成'%20'来处理。
在字符串处理中有个通用的方法是从字符串的末尾开始往回处理,我们这里就使用这个方法。
步骤:
- 获取字符串有效长度以及字符数组的总大小
- 计算字符串中空格的数目
- 计算替换空格后字符串的总长度并与字符数组大小比较。若超出字符数组大小则报错
- 从字符串末尾开始将字符搬移到新的位置,若遇空格则替换为'%20'
代码实现
算法代码与测试程序如下:
#include <stdio.h>
#include <string.h>
int replaceSpace(char *str, int totalLen)
{
int newStrLen = 0;
int originStrLen = 0;
int spaceCount = 0;
int i;
originStrLen = strlen(str);
for (i = 0; i < originStrLen; i++)
{
if (str[i] == ' ')
{
spaceCount++;
}
}
newStrLen = originStrLen + spaceCount * 2;
if (newStrLen + 1 > totalLen)
return -1;
str[newStrLen] = '\0';
for (i = originStrLen - 1; i > 0; i--)
{
if (str[i] == ' ')
{
str[newStrLen - 1] = '0';
str[newStrLen - 2] = '2';
str[newStrLen - 3] = '%';
newStrLen = newStrLen - 3;
}
else
{
str[newStrLen - 1] = str[i];
newStrLen = newStrLen - 1;
}
}
return 0;
}
#define BUFLENS 50
int main(void)
{
char buf[BUFLENS] = "Mr John Smith ";
printf("%s\n", buf);
replaceSpace(buf, BUFLENS);
printf("%s\n", buf);
getchar();
return 0;
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于