题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
思想:
首先将整个句子翻转,然后再分别将每个单词翻转。
代码:
//将字符串中从left到right的子字符串反转 char *ReverseString(char *string, int left, int right) { if((string == NULL) || (left == right)) { return string; } char ch; int i = left;//标记要反转的左边位置 int j = right;//标记要反转的右边位置 while(i < j) { ch = string[i]; string[i] = string[j]; string[j] = ch; i++; j--; } return string; } char *ReverseStringWords(char *string) { if(string == NULL) { return NULL; } //计算字符串长度 int strLen = StringLength(string); //将字符串整个反转 char *revString = ReverseString(string, 0, strLen-1); int left = 0;//标记要反转的子字符串的左下标 int right = 0;//标记要反转的子字符串的右下标 while(right < strLen) { right++; //找空格的位置 if(string[right] == ‘ ‘) { //反转子字符串 revString = ReverseString(revString, left, right-1); right++; left = right; } } return revString; }
注:代码中所用到的求字符串长度的StringLength()函数请看“求字符串长度”