给出一个英文句子,翻转句子中单词的顺序,字符顺序也保持不变 例如,输入"I am a student.", 输出:"student. a am I" /* * Copyright (c) 2011 alexingcool. All Rights Reserved. */ #include <iostream> #include <algorithm> using namespace std; char str[] = {'I', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.'}; const int size = sizeof str / sizeof *str; //简洁的reverse字符串算法 void reverse(char *str, int start, int end) { if(str == NULL) return; while(start < end) { swap(str[start], str[end]); start++; end--; } } //reverse的改版 void reverse(char *str, char *start, char *end) { if(str == NULL) return; while(start < end) { swap(*start, *end); start++; end--; } } char* convert(char (&str)[size]) { char *ahead, *behind; behind = ahead = str; //注意是'/0','/'是转义符,而不是'0' //首要的是判断是否为'/0',即是否遍历完 while(*ahead != '/0') { while(*ahead != '/0') { if(*ahead == ' ') break; else ahead++; } reverse(str, behind, ahead - 1); while(*ahead != '/0') { if(*ahead != ' ') break; else ahead++; } behind = ahead; } reverse(str, 0, size - 1); return str; } void main() { cout << str << endl; convert(str); cout << str << endl; }