题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
这种题是很无聊的,而且用istream什么就没有可以做的了,思路:倒着遍历字符串,查找到一个空格后,输出本空格与上次空格之间的内容。可以用\0临时替代printf。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1024 void reverse_print(char* str) { // Get len int len = strlen(str); int i = len-1; int last = len; char tmp; // Find from last to first while(i>=0) { if( str[i]==' ' || i==0) { tmp = str[last]; str[last] = '#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1024 void reverse_print(char* str) { // Get len int len = strlen(str); int i = len-1; int last = len; char tmp; // Find from last to first while(i>=0) { if( str[i]==' ' || i==0) { tmp = str[last]; str[last] = '\0'; if(i==0 && str[i]!=' ') { printf("%s ", str+i); } else { printf("%s ", str+i+1); } str[last] = tmp; last = i; } i--; } } int main() { char* buf = NULL; int len = 0; len = getline(&buf, &len, stdin); if(len==-1) { printf("getline error.\n"); return -1; }else { buf[len] = '\0'; buf[len-1] = '\0'; // \n reverse_print(buf); if(buf) { free(buf); } } return 0; }'; if(i==0 && str[i]!=' ') { printf("%s ", str+i); } else { printf("%s ", str+i+1); } str[last] = tmp; last = i; } i--; } } int main() { char* buf = NULL; int len = 0; len = getline(&buf, &len, stdin); if(len==-1) { printf("getline error.\n"); return -1; }else { buf[len] = '#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1024 void reverse_print(char* str) { // Get len int len = strlen(str); int i = len-1; int last = len; char tmp; // Find from last to first while(i>=0) { if( str[i]==' ' || i==0) { tmp = str[last]; str[last] = '\0'; if(i==0 && str[i]!=' ') { printf("%s ", str+i); } else { printf("%s ", str+i+1); } str[last] = tmp; last = i; } i--; } } int main() { char* buf = NULL; int len = 0; len = getline(&buf, &len, stdin); if(len==-1) { printf("getline error.\n"); return -1; }else { buf[len] = '\0'; buf[len-1] = '\0'; // \n reverse_print(buf); if(buf) { free(buf); } } return 0; }'; buf[len-1] = '#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1024 void reverse_print(char* str) { // Get len int len = strlen(str); int i = len-1; int last = len; char tmp; // Find from last to first while(i>=0) { if( str[i]==' ' || i==0) { tmp = str[last]; str[last] = '\0'; if(i==0 && str[i]!=' ') { printf("%s ", str+i); } else { printf("%s ", str+i+1); } str[last] = tmp; last = i; } i--; } } int main() { char* buf = NULL; int len = 0; len = getline(&buf, &len, stdin); if(len==-1) { printf("getline error.\n"); return -1; }else { buf[len] = '\0'; buf[len-1] = '\0'; // \n reverse_print(buf); if(buf) { free(buf); } } return 0; }'; // \n reverse_print(buf); if(buf) { free(buf); } } return 0; }
' '.join("I am a student.".split()[::-1])
我也知道Python各种好用啊。。这不是纯粹为了无聊的面试笔试么。。