面试题4:替换空格

时间:2022-05-13 08:56:52
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。
方法一:利用c++的string类实现,可参见c++中string类的详解
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

int main(int argc, _TCHAR* argv[])
{
	string str;
	getline(cin,str);//输入字符串可包含空格,注意与cin>>str;的区别
	while(str.find(" ")!=-1)//str.find()函数查找不到时返回-1,否则返回查找的位置
	{
		int pos=str.find(" ");
		str.erase(pos,1);//删除空格
		str.insert(pos,"%20");//插入字符串
	}
	cout<<str<<endl;
	return 0;
}
方法二:设置两个指针,从后往前进行扫描替换
#include "stdafx.h"
#include <iostream>
using namespace std;

void ReplaceBlank(char string[],int length)
{
	if(string==NULL&&length<=0)
		return;
	int originalLength=0;
	int numberOfBlank=0;
	int i=0;
	while(string[i]!='\0')
	{
		++originalLength;
		if(string[i]==' ')
			++numberOfBlank;
		++i;
	}
	int newLength=originalLength+numberOfBlank*2;
	if(newLength>length)
		return;
	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;
	}
}


int main()
{
	const int length=100;
	char string[length]="fgsk";
	ReplaceBlank(string,length);
	cout<<string<<endl;
	return 0;
}