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