在网络编程中,如果URL参数中含有特殊字符,如空格、#等,则可能导致服务器端无法获得正确的参数值
我们需要将这些特殊符号转换成服务器可以识别的字符
转换的规则是在%后面跟上ASCI码的两位十六进制的表示
比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成”%20“
将空格替换成‘%’、’2’和‘0’这 3个字符,代码实现如下:
#include<stdio.h>
#include<iostream>
#include<string>
//将字符串中的空格替换为20%
void ChangeSpace(char *arr)
{
int len = strlen(arr);
int Num = 0; //统计空格个数
for (int i = 0; i < len ; i++)
{
if (arr[i] == ' ')
{
Num++;
}
}
int j = strlen(arr) + Num * 2;//在每个有空格的位置的基础上加两个格子来放20%
int i = strlen(arr);
while (i >= 0 && j != i) //当有空格时,j肯定大于i,当i==j时就以为着前面肯定不存在空格
{
if (arr[i] != ' ') //如果不是空格,就直接赋值
{
arr[j--] = arr[i];
}
else //如果是空格,就用% 2 0分别去替换
{
arr[j--] = '0';
arr[j--] = '2';
arr[j--] = '%';
}
i--;
}
}
int main()
{
char brr[100] = "we are happy"; //将' '替换为"%20"
printf("%s\n", brr);
ChangeSpace(brr);
printf("%s\n", brr);
return 0;
}
整体思路如下:
1、先统计空格个数,在每个有空格的位置的基础上加两个格子来放‘%’、‘2’、‘0’这三个字符
2、把第一个指针指向字符串的末尾,把第二个指针指向替换之后的字符串的末尾
3、依次复制字符串的内容,直至第一个指针碰到第一个空格
4、把第一个空格替换成‘%’、‘2’、‘0’,把第一个指针向前移动1格,把第二个指针向前移动3格
5、依次向前复制字符串中的字符,直至碰到空格
6、替换字符串中的倒数第二个空格,把第一个指针向前移动1格,把第二个指针向前移动3格,以此类推