剑指offer| |替换空格

题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路:

方法一:开辟一个新的数组来存放新的字符串

代码:

#include <stdio.h>
#include <assert.h>

char newStr[100] = { 0 };
char* NewStr(char* str)
{
	int i = 0;
	assert(str);

	while (*str != '\0')
	{
		if (*str != ' ')
		{
			newStr[i++] = *str;
		}
		else
		{
			newStr[i++] = '%';
			newStr[i++] = '2';
			newStr[i++] = '0';
		}
		str++;
	}
	newStr[i] = '\0';
	return newStr;
}

int main()
{
	char str[30] = "We Are Happy";
	char* newStr = NULL;
	printf("%s\n", str);
	newStr = NewStr(str);
	printf("%s\n", newStr);
	return 0;
}

方法二:在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串
从后向前进行替换,有两个指针。一个指向计算好的字符串的尾端,另一个指向原先的字符串的尾端,
需要计算原先字符串有多少个空格

代码:

#include <stdio.h>
#incldue <assert.h>
#incldue <string.h>

char* NewStr(char* str)
{
	int count = 0;
	assert(str);

	//计算原先字符串有多少个空格
	char* tmp = str;
	while (*tmp != '\0')
	{
		if (*tmp == ' ')
		{
			count++;
		}
		tmp++;
	}
	//给出两个指针,从后向前依次走
	char* ps1 = NULL;
	char* ps2 = NULL;
	//计算长度
	ps1 = str + (strlen(str) - 1);
	ps2 = str + ((strlen(str) - count) + (count * 3) - 1);
	//对于字符串一次排序
	while (ps1 != str)
	{
		if (*ps1 != ' ')
		{
			*(ps2--) = *ps1;
			
		}
		else
		{
			*(ps2--) = '0';
			*(ps2--) = '2';
			*(ps2--) = '%';
		}
		ps1--;
	}
	str = ps2;
	return str;
}

int main()
{
	char str[30] = "We Are Happy";
	char* newStr = NULL;
	printf("%s\n", str);
	newStr = NewStr(str);
	printf("%s\n", newStr);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40399012/article/details/81712368
今日推荐