C语言------将一个字符串中的空格转化为特殊字符

        在之前这篇博客中有提到过,在用URL来标识万维网上的特殊文档时,需要对一些用户输入的字符进行urlencode处理。因为URL中的一些字符已被特殊化对待,如?等在URL中表示着特殊的含义。当用户在搜索内容时也输入了?时,就会将其混淆,所以要对用户输入的这些字符进行urlencode处理。

        在本问题中,就是实现将用户输入字符串中的空格字符进行urlencode处理,将其转化为%20。如将字符串“hello world”中的空格转化为%20,结果为:“hello%20world”。前提:源字符串有足够大的空间。

        思路:

(1)首先遍历源字符串,统计源串中空格字符的个数。

(2)因为源串中的一个空格替换后变成了3个字符,所以重新计算替换后的字符串长度:源串长度加上空格个数乘2。

(3)将源串从最后一个字符(将\0也拷贝上)开始拷贝至新串的末尾,即从尾部开始拷贝,依次遍历两个字符串。如果在遍历源串的过程中遇到了空格,就将新串中的连续三个字符替换为%20.

        根据上述思路,实现代码如下:

void Replacement(char* iniString, int length)
{
	if (iniString == NULL || length <= 0)
	{
		//非法输入
		return;
	}
	//首先统计字符串中的空格个数
	int spacenum = 0;
	int i = 0;
	for (i = 0; i < length; i++)
	{
		if (iniString[i] == ' ')
		{
			spacenum++;
		}
	}
	//将数组的长度替换为原字符串的长度加上空格的个数乘2
	int newnum = length + spacenum * 2;
	int index = newnum;//新串也从尾部开始遍历
	//将字符串从尾部拷贝到新数组的尾部
	for (i = length; i >= 0; i--)
	{
		//如果遇到空格则替换为%20
		if (iniString[i] == ' ')
		{
			iniString[index--] = '0';
			iniString[index--] = '2';
			iniString[index--] = '%';
		}
		else
		{
			iniString[index--] = iniString[i];
		}
	}
	return;
}


猜你喜欢

转载自blog.csdn.net/sandmm112/article/details/80444838