剑指offer-替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路1:从前到后或从后到前进行遍历,发现空格则用“%20”替换,时间复杂度O(n^2);
思路2:先遍历数组得出空格数,增加数组有效长度,后通过两个不同的指针P1,P2一个指向原数组,一个指向增加长度后的数组,未发现空格时进行替换,发现空格时P1--,P2--三次即可。贴出代码:::
//请实现一个函数,将一个字符串中的空格替换成“%20”。
//例如,当字符串为We Are Happy.则经过替换之后的字符串为
//We%20Are%20Happy。

#define _CRT_SECURE_NO_WARNINGS
#include 
using namespace std;
//方法一:从尾到头获取空格处并替换
//时间复杂度O(n^2)
void Replace(char *str, int length)
{
	int j = 0;
	int len = length;
	int k = 0;
	for (int i = length - 1; i >= 0; i--)
	{
		if (str[i] == ' ')
		{
			//str[i] = '0';
			j = i;		
			for (k = length - 1; k>j; k--)
			{
				str[k + 2] = str[k];
			}
			str[j] = '%';
			str[j + 1] = '2';
			str[j + 2] = '0';
			length = length + 2;
		}	
	}
}
//方法二:先遍历数组获取空格数,后通过定义两个不同指针对其进行替换。
//时间复杂度:O(n)
void Replace1(char str[],int length)
{
	int num = 0;
	int nlength = 0;
	int olength = length - 1;
	for (int i = 0; i < length; i++)
		if (str[i] == ' ')
			num++;
//获取扩展后的长度nlength
	nlength = olength+2 * num;
//赋值操作
	while (olength >= 0 && nlength > olength)
	{
		if (str[olength] == ' ')
		{
			str[nlength--] = '0';
			str[nlength--] = '2';
			str[nlength--] = '%';
		}
		else
		{
			str[nlength--] = str[olength];
		}
		olength--;
	}
}
int main()
{
	char str[10] = "We Are Fa";
	char str1[100];
	strcpy(str1,str);
	Replace1(str1,10);
	cout << str1 << endl;
	return 0;
}

你可能感兴趣的:(剑指offer)