剑指 Offer 05. 替换空格(完整代码+解析)

剑指 Offer 05. 替换空格 

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof

既然要把字符串中的 空格替换成"%20",那我们就要找到字符串中的空格,并记录个数

剑指 Offer 05. 替换空格(完整代码+解析)_第1张图片

因为要把' '替换成"%20" ,每替换一次,字符个数就增加2,所以数组大小需要变化

这里我们利用malloc函数开辟一块空间,作为新数组的空间,加1是为了给'\0'腾个地方

接着我们利用双指针来进行替换(双指针我还没太弄明白,等我在进修进修,尝试了双循环,力扣不给过)

我们相当于创建了一个新的数组,所以别忘了把空格以外的数放进新数组中吼 

剑指 Offer 05. 替换空格(完整代码+解析)_第2张图片

重新创建完后,别忘了在最后给个结束标志 '\0' ,然后返回p(新的数组地址哈,反原来的那个数组地址没用哈)

 

完整代码 

char* replaceSpace(char* s) 
{
	char* tem = s;
	int i = 0;
	int sz = strlen(s);
	int count = 0;
	for (i = 0; i < sz; i++)
	{
		if (s[i] == ' ')//字符串用"",单个字符用''
		{
			count++;//记录空格个数
		}
	}
	int news = sz + count * 2;
	char* p = (char*)malloc(sizeof(char)*(news) + 1);//新的数组大小
	int j = 0;
	for (i = 0, j = 0; i < sz; i++, j++)
	{
			if (s[i] == ' ')
			{
				p[j] = '%';
				p[j + 1] = '2';
				p[j + 2] = '0';
				j += 2;
			}
			else
			{
				p[j] = s[i];
			}
	}
	p[news] = '\0';
	return p;
}

这个是主函数部分,力扣里不用,但我感觉这个更有助于返回的理解,所以我也写上了 

int main()
{
	char arr[10001] = "We are happy.";
	//printf("%d", strlen(arr));
	char* ret = replaceSpace(arr);
	printf("%s\n", ret);
	return 0;
}

你可能感兴趣的:(力扣刷题---剑指,Offer,(c语言解题),算法,数据结构,c语言)