翻转句子中单词的顺序

题目:

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。

 

思路:

翻转“I am a student.”中所有字符得到“.tneduts a ma I”,再翻转每个单词中字符的顺序得到“students. a am I”,正是符合要求的输出。

 1 void Function( char * str )
 2 {
 3   int len = strlen( str );
 4   Reverse( str, str+len-1 );
 5 
 6   char * left , *right, *p;
 7   p= str;
 8 
 9   while ( *p != '\0' )
10   {
11     while ( *p ==' ' && *p!= '\0' )  //过滤掉单词前边的空格,确定单词起始位置,while结束时p指向字母,
12       p++;
13     left = p;  // left为单词的起始位置。
14     while ( *p !=' ' && *p != '\0' )    //确定单词结束位置,结束时p指向空格,
15        p++;
16     right = p-1;
17     Reverse( left, right );  
18   }
19 }
20 void Reverse( char *left, char *right )
21 {
22   while ( left < right )
23   {
24     tem = *left;
25     *left = *right;
26     *right = tem;
27     left++;
28     right--;
29   }
30 }

posted on 2012-04-06 16:44  NLP新手  阅读(1484)  评论(0编辑  收藏  举报

导航