翻转句子中单词的顺序

题目:

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“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 }

转载于:https://www.cnblogs.com/kevinGaoblog/archive/2012/04/06/2434905.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值