[备忘]倒置字符串中的单词

输入:一个字符串,单词用某个特定符号分割(比如空格)
输出:一个字符串,单词顺序和原串相反

看到倒置,一般的做法是用栈,要么自己建个数组、要么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’),直接返回一个分割后的数组,相当的方便。

This entry was posted in 技术学习 and tagged , . Bookmark the permalink.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据