c - BASH/CSH/ZSH 样式大括号扩展算法

标签 c algorithm string-parsing brace-expansion

如果我有一个像

这样的字符串
a/{b,c,d}/e

然后我希望能够产生这个输出:

a/b/e
a/c/e
a/d/e

你明白了。我需要在 C 中实现它。我编写了一种强力代码,我能够解析一对大括号(例如:/a/{b,c,d}/e/ 但是如果有多对大括号,比如 /a/{b,c}/{d,e}/f 在这种情况下我的方法就会失效。我想采用更好的方法.

我不是直接要求代码,只是对高效算法的提示就足够了。我认为解析大括号的任务是重复的,我们可以遵循递归算法吗?

最佳答案

如果您使用的是任何类型的 Unix、Linux 或 OS X 系统,都有一个内置的库函数可以执行此操作。 man 3 glob 会告诉你如何从 C 调用它。或者你可以访问 http://linux.die.net/man/3/glob查找在线文档。

如果您想自己动手,一个简单的方法是首先扫描字符串并构建一个中间数据结构,然后递归遍历该数据结构,打印字符串。该数据结构可以由具有以下字段的结构构建:

  • 文本:指向一段字符串的指针
  • next_node:指向打印时此文本之后的内容的指针
  • sibling_node:指向下一个可以做出的选择而不是这个的指针

关于c - BASH/CSH/ZSH 样式大括号扩展算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230639/

相关文章:

mysql - 如何将我的 .log 文件存入数据库或适合数据库的格式

c - make 是否适合选择要包含的功能

c - 如何旋转 cvMat 中的值?

c - VirtualAlloc 为批量文件读取分配内存时出现问题

algorithm - 收集一组项目的优化算法

c - 如何编写一个简单的基于文本的协议(protocol),最好是用 C

c - c中的指针和字符串解析

c - 扫描 C 中的值直到遇到换行符, '\n'

java - 高效的大字符串(in)相等函数

javascript - 使用 Javascript 从字符串中解析值