您的位置:首页 > 其它

【Cracking the coding interview】Q1.5(替换字符串)

2013-12-23 20:18 399 查看
Write a method to replace all spaces in a string with ‘%20’.

写一个函数,把字符串中所有的空格替换为%20 。

下面提供两种方法,一种分配了新的空间,一种在利用了原来的空间。

#include <iostream>
#include <cstring>
using namespace std;

string  replace(string s,char ors,string re){
if(s=="")
return s;
int len=s.length();
int orlen=1;
int relen=re.length();
int count=0;
for(int i=0;i<len;i++)
if(s[i]==ors)
count++;

int afterlen=len+(relen-orlen)*count;

char *after=new char[afterlen];
int p=0;
for(int i=0;i<len;i++){

if(s[i]==ors){
i++;
int j=0;
while(j<relen)
after[p++]=re[j++];

}
after[p++]=s[i];
}
after[p]='\0';
return after;

}

char*  replace2(char *s,char ors,string re){
if(s=="")
return s;
int len=strlen(s);
int orlen=1;
int relen=re.length();
int count=0;
for(int i=0;i<len;i++)
if(s[i]==ors)
count++;

int afterlen=len+(relen-orlen)*count;

//没有分配新的空间
s[afterlen]='\0';
int p=afterlen-1;
for(int i=len-1;i>=0;i--){

if(s[i]==ors){
i--;
int j=relen-1;
while(j>=0)
s[p--]=re[j--];

}
s[p--]=s[i];
}

return s;

}

int main(){
string s="I am a girl.";
char s2[]="I am a girl.";
cout<<"after replace"<<endl<<replace(s,' ',"%20")<<endl;
cout<<"after replace"<<endl<<replace2(s2,' ',"%20");

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: