天天看点

题:把字符串中的每个空格替换成20%

在网络编程中,如果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格,以此类推