IT技术博客大学习 共学习 共进步

倒置字符串中的单词

Programming Life with Music 2009-11-17 23:14:56 浏览 3,484 次

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

看到倒置,一般的做法是用栈,要么自己建个数组、要么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<string> stack;
    while (cin.getline(tmp, MAX, '#')) stack.push_front(string(tmp));
    copy(stack.begin(), stack.end(), ostream_iterator<string>(cout," "));
}

如果是处理字符串, 而不是stdin, 可以改用sscanf()或者STL的范型算法find, 更标准的做法是strtok()。想到了javascript里的String().split(’x'),直接返回一个分割后的数组,相当的方便。

建议继续学习

  1. PHP与递归Recursion (阅读 9,120)
  2. 关于使用STL的红黑树map还是hashmap的问题 (阅读 8,741)
  3. 萃取(traits)编程技术的介绍和应用 (阅读 6,364)
  4. 循环、迭代、遍历和递归 (阅读 5,421)
  5. 一个简单的stl中string的split函数 (阅读 4,262)
  6. 递归并不一定非得是“自己调用自己的function” (阅读 4,162)
  7. STL笔记之二叉查找树 (阅读 3,982)
  8. 小心递归次数限制 (阅读 3,940)
  9. 小趣闻:STL的三个版本 (阅读 3,783)
  10. PHP正则之递归匹配 (阅读 3,601)