1. 程式人生 > >《劍指offer》第二題

《劍指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;

測試結果:
在這裡插入圖片描述