1 题目
输入一个英文橘子,翻转句子中的单词顺序,但是单词内字符串的顺序不变,简单起见,标点符号和普通字符字母一样处理,例如输入字符串"I am a student.",则输出"student. a am I"
2 思路
先反转字符串所有,然后在反转里面的单词,我们用两个首尾指针操作
3 代码实现
#include <stdio.h> /* * 反转整个字符串 */ void reverse(char *begin, char *end) { if (NULL == begin || NULL == end) return; while (begin < end) { char temp = *end; *end = *begin; *begin = temp; ++begin; --end; } } /* * 反转字符串里面的单词 */ char* reverseNumeber(char *str) { if (NULL == str) { return NULL; } char *begin = str; char *end = str; while (*end != '\0') { end++; } --end; //反转整个字符串 reverse(begin, end); //再反转里面的单词 begin = end = str; while (*begin != '\0') { if (*begin == ' ') { begin++; end++; } else if (*end == ' ' || *end == '\0') { //如果这里是用reverse(begin, end--) //那么我们用' '和前面的指针替换,有问题。 reverse(begin, --end); begin = ++end; } else { ++end; } } return str; } int main() { char a[] = "chenyu word hello"; char *result = NULL; result = reverseNumeber(a); if (NULL == result) { printf("result is NULL\n"); } else { printf("%s\n", result); } return 0; }
4 运行结果
hello word chenyu