九度链接:http://ac.jobdu.com/problem.php?pid=1510
题目1510:替换空格
-
题目描述:
-
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
-
输入:
-
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
-
输出:
-
对应每个测试案例,出经过处理后的字符串。
-
样例输入:
-
We Are Happy
-
样例输出:
-
We%20Are%20Happy
先得到替换空格后字符串的总长度,再从后向前扫描填充。
本题之前一直Runtime Error,是因为数组开的不够大。
// 面试题4 替换空格
//AC
#include <stdio.h>
#include <string.h>
char buf[1000000];
char* replace(char *str, int length) {
if (str == NULL)
return str;
int len = 0;
char *tmp = str;
while (*tmp != '\0') {//计算字符串中包含的空格数
if (*tmp == ' ')
len ++;
tmp ++;
}
char* p = str + length + len * 2 - 1;//替换后字符串的末尾
char* q = str + length - 1;//替换前字符串的末尾
while (length -- != 0) {
if (*q == ' ') {
*(p --) = '0';
*(p --) = '2';
*(p --) = '%';
q --;
}
else {
*p = *q;
p --;
q --;
}
}
return str;
}
int main() {
gets(buf);
int len = strlen(buf);
char* tmpStr = replace(buf, len);
printf("%s\n", tmpStr);
return 0;
}