一、
1、题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如:输入“We wre happy”,则输出"We%20are%20happy"。
2、在网络编程中,如果URL参数中含有特殊字符,如空格、‘#’等,则可能导致服务器端无法获取正确的参数值。我们可以将这些特殊符号替换成服务器可以识别的字符。可以在‘%’后面跟上ASCII码的两位十六进制表示。空格的ASCII码为32.
3、思路:
(1)把第一个指针指向字符串的末尾,把第二个指针指向替换后字符串的末尾
(2)依次复制字符串的内容,直至第一个指针碰到第一个空格
(3)把第一个空格替换成“%20”,把第一个指针向前移动1格,把第二个指针向前移动3格
(4)依次向前复制字符串中的字符,直至碰到空格
(5)替换字符串中的倒数第二个空格,把第一个指针向前移动1格,把第二个指针向前移动3格
4、程序实现:
# include<stdio.h>
# include<stdlib.h>
# include<assert.h>
void IsReplaceSpace(char *arr, int len)
{
if (NULL == arr || len <= 0)
return;
//计算出原始字符串的长度和空格的个数
int OriArrCount = 0;//原始字符串的长度
int NewArr = 0;//新串的长度
int SpaceCount = 0;//空格的个数
int i = 0;
while (arr[i] != '\0')
{
++OriArrCount;
if (arr[i] = ' ')
++SpaceCount;
++i;
}
//替换后,新串的长度
NewArr = OriArrCount + 2 * SpaceCount;
if (NewArr > len)
return;
int IndexOriArrCount = OriArrCount;
int IndexNewArr = NewArr;
while (IndexOriArrCount > 0 && IndexNewArr > IndexOriArrCount)
{
if (arr[IndexOriArrCount] == ' ')
{
arr[IndexNewArr--] = '0';
arr[IndexNewArr--] = '2';
arr[IndexNewArr--] = '%';
}
else
arr[IndexNewArr--] = arr[IndexOriArrCount];
--IndexOriArrCount;
}
}
int main()
{
char arr[] = "We wre happy";
int len = strlen(arr);
IsReplaceSpace(arr, len);
printf("%s\n" );
system("pause");
return 0;
}
测试结果:
产生这种错误的原因是: