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

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值