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