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

posted @ 2007-09-08 00:02  HonestMan  阅读(524)  评论(1编辑  收藏  举报