剑指offer--(2.3.3)面试题4:替换空格

 剑指offer--(2.3.3)面试题4:替换空格


     题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如:输入“We are happy.”,则输出“We%20are%20happy.”。


解决方法:先遍历一遍字符串,统计空格总数,确定计算出替换之后的总长度。然后用两个指针从后向前移动,遇到空格则将“%20”三个字符插入,直到遍历完。过程如下图:

解题思路清楚后,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <assert.h>
#include <string.h>
//length为字符数组string的总容量

int ReplaceBlank(char string[],int length)
{
	if(string == NULL && length <= 0)
	{
		return 0;
	}
	//originalLength为字符串string的实际长度
	int originalLength = 0;
	int numberOfBlank = 0;
	int i = 0;
	while(string[i] != '\0')
	{
		++ originalLength;

		if(string[i] == ' ')
			++ numberOfBlank;
		++ i;
	}
	//newLength为把空格换成‘%20’之后的长度

	int newLength = originalLength + numberOfBlank * 2;
	if(newLength > length)
		return 0;

	int indexOfOriginal =originalLength;
	int indexOfNew = newLength;
	while(indexOfOriginal >= 0 && indexOfNew >indexOfOriginal)
	{
		if(string[indexOfOriginal] == ' ')
		{
			string[indexOfNew --] = '0';
			string[indexOfNew --] = '2';
			string[indexOfNew --] = '%';
		}
		else
		{
			string[indexOfNew --] = string[indexOfOriginal];
		}

		-- indexOfOriginal;
	}
	return numberOfBlank;
}

int main()
{
	//注意,我用这种输入形式试过,不能检测出空格的个数,如果大佬解决了,评论一下,谢谢啦
	//char s[]={"We are happy."};
	char s[20];
	s[0]='W';
	s[1]='e';
	s[2]=' ';
	s[3]='a';
	s[4]='r';
	s[5]='e';
	s[6]=' ';
	s[7]='h';
	s[8]='a';
	s[9]='p';
	s[10]='p';
	s[11]='y';
	s[12]='.';
	s[13]='\0';
	printf("%s\n",s);  //输出原始数组内容
	int length = sizeof(s)/sizeof(s[0]);//原始数组长度
	printf("%d\n",length);
	printf("%d\n",ReplaceBlank(s,length));//将空格换成20%
	printf("%s",s);//输出替换后的内容
}

注意:我用这种输入形式试过,不能检测出空格的个数,如果大佬解决了,评论一下,谢谢啦
    char s[]={"We are happy."};

输出结果:

猜你喜欢

转载自blog.csdn.net/qq_41103495/article/details/105520880