删除字符串中的空格


要求:不得开辟额外的空间,而且用递归实现!

C++版:

#include  < stdio.h >
#include 
<string >
using   namespace  std;

void  moveSpace( string ::iterator &  head,  string ::iterator &  newhead,  string &  str)
{
     
if  ( head  ==  str.end())
     {
           
if  (newhead  !=  head)  
               
* newhead  =   ' \0 ' //  新的结尾标志, Just For C API, anybody make sure it's used in std::string?
            return ;
     }
     
if  (  * head  ==   '   ' )
          moveSpace(
++ head,newhead,str);
     
else
     {
          
* newhead  =   *  head;
          moveSpace(
++ head, ++ newhead,str);
     }
}

int  main()
{
    
// test case1

    
string  testStr  =   "           " ;
    
string ::iterator h1  =  testStr.begin();
    
string ::iterator h2  =  testStr.begin();
    moveSpace(h1,h2,testStr);
    printf(
" %s\n " ,testStr.c_str());

   
// test case2

    testStr 
=   "     I am man    !  " ;
    h1 
=  testStr.begin();
    h2 
=  testStr.begin();
    moveSpace(h1,h2,testStr);
    printf(
" %s\n " ,testStr.c_str());

    
// test case3

    testStr 
=   "    I a m m a        n !       " ;
    h1 
=  testStr.begin();
    h2 
=  testStr.begin();
    moveSpace(h1,h2,testStr);
    printf(
" %s\n " ,testStr.c_str());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值