最近在刷《劍指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;
測試結果: