输入:一个字符串,单词用某个特定符号分割(比如空格)
输出:一个字符串,单词顺序和原串相反
看到倒置,一般的做法是用栈,要么自己建个数组、要么STL,或者递归用程序栈。
优雅的递归
void reverse_token() {
char str[MAX] = {0};
if (scanf("%[^#]", str) != EOF) { //利用scanf的正则式特性
getchar();
reverse_token();
printf("%s ", str);
}
}
STL list
void reverse_token() {
char tmp[MAX];
list stack;
while (cin.getline(tmp, MAX, '#')) stack.push_front(string(tmp));
copy(stack.begin(), stack.end(), ostream_iterator(cout," "));
}
如果是处理字符串, 而不是stdin, 可以改用sscanf()或者STL的范型算法find, 更标准的做法是strtok()。想到了javascript里的String().split(‘x’),直接返回一个分割后的数组,相当的方便。
本作品采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。