faraway  
/**//*
 *     将字符串中单词出现次序逆序。
 *    "123 45 6"  --->>    "6 45 123"  
 *
 *    对字符串扫描两次,第一次全体逆序,第二次以单词为单位逆序
 *   
 
*/


#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>

char* reverse_string( char* p, unsigned int size )
{
    
char            tmp;
    unsigned 
int    i; 

    
if ( p == NULL || size == 0 || size == 1 )
        
return NULL;

    i 
= 0;
    
while ( i < size/2 ) {
        tmp        
= p[i];
        p[i]       
= p[size-1-i];
        p[size
-1-i] = tmp;
        i
++;
    }


    
return p;
}


int main( void )
{
    
char buf[100= "1234567 1  1234   56";
    unsigned 
int buf_size;
    unsigned 
int i;
    unsigned 
int j;

    buf_size 
= strlen( buf );

    printf(
"old string:\n%s\n", buf );
    reverse_string( buf, buf_size );
    printf(
"reversed first time:\n%s\n", buf );

    i 
= 0;
    
while ( i < buf_size ) {
        
//    skip spaces
        while ( buf[i] == ' ' && buf[i] != '\0' ) {
            i
++;
        }

        j 
= i;

        
//    find nearest space
        while ( buf[i] != ' ' && buf[i] != '\0' ) {
            i
++;
        }


        
//    now j point to the first character of 
        
//    current word and i point to the nearest space
        reverse_string( &buf[j], i-j );
    }

    printf(
"reversed string:\n%s\n", buf );

    
return 0;
}

posted on 2008-07-15 09:52  faraway  阅读(833)  评论(2编辑  收藏  举报