C语言实现替换空格为%20

C语言实现替换空格为%20,第1张

一 问题描述

实现函数,把字符串中的空格替换为"%20"
例如:把字符串"We are happy“中的空格全都替换为”%20",替换之后字符串就变为了"We%20are%20happy"

二 解题思路

① 利用两个数组实现

对该字符串进行遍历,一个字符一个字符往另外一个数组里面放,如果遇到空格就放入%20.

注意:

当放完所有的字符后,记得加上字符结束标志‘\0'

要写成if else的结构,否则会多放入一个‘ ’

缺点:另外开辟了一个一块空间,会造成空间的浪费

#define _CRT_SECURE_NO_WARNINGS 1 
#include
#include
#include
int main()
{
	char str[100] = "I LOVE STUDY!";
	char space[100] = { 0 };
	int len =(int)strlen(str);
	int i = 0;
	int j = 0;
	for (i = 0; str[i] != '\0'; i++)
	{
		if (str[i] != ' ')
		{
			space[j] = str[i];
			j++;
		}

		else
		{
			space[j++] = '%';
			space[j++] = '2';
			space[j++] = '0';
		}
	}
	space[j] = '\0';

	printf("%s", space);
	return 0;
}

② 从前往后移动数组

从前往后对数组进行遍历,如果碰到空格,之后的所有元素都往后移动两个单位。


注意:由于会往后移动数组,因此数组的长度一直在变化。


所以每次循环都需要重新计算长度。


缺点:效率低。


每次遇到一个空格都需要往后移动

#define _CRT_SECURE_NO_WARNINGS 1 
#include
#include
#include
int main()
{
	char str[100] = "I LOVE STUDY";
	int i = 0;
	
	int j = 0;
	for (i = 0; str[i] != '\0'; i++)
	{
		if (isspace(str[i]))
		{
			int len = strlen(str);
			for (; len > i; len--)
			{
				str[len + 2] = str[len];
			}	
			str[i] = '%';
			str[i + 1] = '2';
			str[i + 2] = '0';
		} 
	}

	printf("%s", str);
	return 0;
}

③ 首先记录空格的数量,然后利用一个指针扩大数组2*空格数,指向扩大后末尾的位置,另外一个指针指向字符串的末尾。


从后往前放入。


#define _CRT_SECURE_NO_WARNINGS 1 
#include
#include
#include
int main()
{
	char str[100] = "WE ARE HAPPY!";

	int len =(int)strlen(str);
	int space = 0;
	int i = 0;
	char* end1 = str + len-1;
	

	for (i = 0; str[i]; i++)
	{
		if (isspace(str[i]))
		{
			space++;//算出有多少个空格
		}
	}

	char* end2 = str + len -1+space * 2;

	while (end1 != end2)
	{
		if (isspace(*end1))
		{
			*end2-- = '0';
			*end2-- = '2';
			*end2-- = '%';
			end1--;	
		  }

		else
		{
			*end2 = *end1;
			end2--;
			end1--;
		}
	}
	
	printf("%s", str);

	return 0;
}

三 比较推荐第三种

效率比较高,也没有造成空间浪费。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/621734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-15
下一篇 2022-04-15

发表评论

登录后才能评论

评论列表(0条)

保存