剑指offer 6.3 知识迁移能力7-反转单词顺序

来源:互联网 发布:mysql 命令修改端口号 编辑:程序博客网 时间:2024/05/16 09:26

面试题42:反转单词顺序 VS 左旋转字符串

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如输入“I am a student.”,则输出“student. a am I”。

思路:首先反转整个字符串。I am a student.”=> .tneduts a ma I”;

      然后再反转每个单词。

void reserveStr(char *begin, char *end) {if(begin == NULL || end == NULL) return;while(begin < end) {char temp = *begin;*begin = *end;*end = temp;begin ++;end --;}}char *reserveSentence(char *str) {if(str == NULL)return NULL;char *begin = str;char *end = str;while(*end != '\0') {end ++;}end --;// 翻转整个句子的字符串reserveStr(begin, end);// 再把每个单词翻转回来begin = end = str;while(*begin != '\0') {if(*begin == ' ') {begin ++;end ++;} else if(*end == ' ' || *end == '\0') {reserveStr(begin, --end);begin = ++end;} else {end ++;}}return str;}int main() {//char *str = "I AM A STUDENT."; // 程序会在*pBegin = *pEnd; 处异常,                                   // 在这种情况下str指向的是常量字符串,// 编译器不允许对常量字符串修改的缘故。//cout << reserveSentence(str) << endl;char str[] = "I AM A STUDENT.";cout << sizeof(str) << endl;cout << reserveSentence(str) << endl;return 0;}
代码还不够健壮,可以用strdup()

char *str = strdup("I AM A STUDENT.");


0 0