《剑指offer》第二题

最近在刷《剑指offer》的66道编程题,准备先用c++刷一遍,后期再用python重刷一遍,在刷题的过程中不仅把函数实现了,还写了测试的代码确保结果的正确性。废话不多说,直接上题。

题目:替换空格

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

思路:

由于c++中vector更方便对数组的元素进行删除和插入操作并且能够自动的调整容器的大小,因此先将输入的字符数组复制到vector中,然后循环遍历整个vector,遇到空格时把空格删除,并在该位置再插入"%20",最后在把vector赋给str即可。
注意:由于替换后字符数组str的大小增加了,因此在定义str时应采用动态分配内存的方法。

c++实现:

#include "stdafx.h"
#include"stdio.h"
#include<iostream>
#include<vector>
#include<string>

using namespace std;

class Solution{
public:
	void replacespace(char *str,int length){
		//先把str转化为vector
		vector<char> vstr(length);
		copy(str,str+length,vstr.begin());
		//遍历vstr,遇到' '删除并将"%20"插入到删除的位置
		string str_replace="%20";
		for(int i=0;i<vstr.size();i++){
			if(vstr[i]==' '){
				vstr.erase(vstr.begin()+i);
				vstr.insert(vstr.begin()+i,str_replace.begin(),str_replace.end());
				i=i+3;
			}
		}
		//将vector转换为字符数组
		int i;
		for(i=0;i<vstr.size();i++)
			str[i]=vstr[i];
		str[i]='\0';
	}
};


int _tmain(int argc, _TCHAR* argv[])
{
	char *str=new char[1000];
	cout<<"请输入要替换空格的字符串:"<<endl;
	gets(str);
	int length=strlen(str);
	Solution solution;
	solution.replacespace(str,length);
	cout<<str<<endl;

	delete [] str;

	return 0;

测试结果:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章