面试题4:替换空格

题目:请实现一个函数,把字符串中的每个空格替换成“%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;

}

你可能感兴趣的:(面试题)