[Problem]
给出一个英语句子,希望你把句子里的单词顺序都翻转过来
[Analysis]
为保证额外的空间开销,在原字符串上处理:首先将整个句子翻转一遍,然后从头到尾遍历一次,翻转每一个单词。
[Solution]
#include <stdio.h> #include <string.h> #define MAX_LEN 10001 int main(){ // input data char str[MAX_LEN]; gets(str); int len = strlen(str); // reverse all characters for(int i = 0; i < len/2; ++i){ char tmp = str[i]; str[i] = str[len-1-i]; str[len-1-i] = tmp; } // reverse words int start = 0, end = 0; while(end < len){ // filter blanks while(end < len && str[end] != ' '){ end++; } // reverse if(end > start){ for(int i = 0; i < (end-start)/2; ++i){ char tmp = str[start + i]; str[start + i] = str[end-1-i]; str[end-1-i] = tmp; } start = end; } // move forward start++; while(start < len && str[start] == ' '){ start++; } end = start; } // output result printf("%s\n", str); return 0; }