reverse string word by word

String is key part of interview.
here is reverse string :
Write code to reverse a string such that the words are reversed as in "We apologise for the inconvenience" becomes "inconvenience the for apologise We".
sound like simple ? not really! I think the answer not only correct but also neat and perfect.
here is my version 1:
if you have better answer, please post here.

first, i have basic idear:

The solution is to do it in two passes. In the first pass the whole string is reversed and in the second each word is reversed again.

After reversing the whole string: "ecneinevnocni eht rof esigolopa eW"
Reversing word at a time:           "inconvenience eht rof esigolopa eW"
...
Finally:                                         "inconvenience the for apologise We"

void ReverseString(char *p1,*p2){
//reverse the string between p1 and p2
    char temp;    
    while(p1<p2){
        temp=*p1;
        *p1++=*p2;
        *p2--=temp;
    }//while
}//while

//below function will complete whole function
vod CompleteReverse(char *str){
    //check  if it's null point then return;
    if(!str) return;
    
    if(strlen(str)>0)
    {    
    //reverse whole string
    ReverseString(str, str+strlen(str)-1);
    char *c1 = str, *c2 = str+1;
     do{
            //find word boundary
            for(;c2!=' ' && *c2; c2++);
            
            //reverse
            ReverseString(c1,c2-1);
            if(!*c2) break;
            //done
            c1=++c2;
    }while(*c2)
    return;
}

转载于:https://www.cnblogs.com/chenjiefree/archive/2007/09/08/886364.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值