【问题标题】:Using Grep For Pattern Matching Within A C/C++ Program Is Advisable Or Not?在 C/C++ 程序中使用 Grep 进行模式匹配是否可取?
【发布时间】:2011-08-20 15:56:36
【问题描述】:

我必须编写一个 C/C++ 程序来处理一堆文本文件(大约 100 个)并找到一个模式(通常是一个字符串)。由于我要运行的平台是 unix,我想我为什么不在我的程序中使用 grep 系统命令,因为它非常快速和有效。但是,我的朋友说在程序中使用 system("grep...") 是不可取的。他建议我使用字符串模式匹配算法,我觉得这会减慢程序的速度。

所以,我想对此提出一些建议。帮帮我。

【问题讨论】:

    标签: c++ c unix grep system


    【解决方案1】:

    make fork 和使用 exec 系列命令使用 grep 并将其结果保存在文件中。 在主要等待过程结束。 然后在 main 打开文件并使用结果。

    【讨论】:

      【解决方案2】:

      您的两个主要选择是 (a) 使用 grep,或 (b) 使用链接到您的 C 或 C++ 程序的库,该程序提供正则表达式。

      使用 grep 意味着您可以很快运行您的程序,因为您不需要学习太多东西。使用正则表达式库意味着您的程序运行得更快。

      快多少?速度的主要提高是因为您没有为这 100 个文件中的每一个文件设置一个新进程并运行一个新程序。这种速度节省有多大意义?

      答案取决于每个文件有多大。如果它们非常大,那么您使用哪种方法不会产生太大的速度差异。如果很小,它会的。

      如果您决定使用正则表达式库,我猜它们的速度都差不多。我选择了我熟悉的东西,因为我知道 Perl:Perl compatible regular expression library

      【讨论】:

        【解决方案3】:

        不知道你的程序要做什么,很难说。但是通过 system() 运行命令会大大降低你的程序速度,尽管这可能并不重要。无论您做什么,如果正则表达式可以解决问题,请不要编写自己的字符串匹配代码 - 使用许多现有的正则表达式库之一。如果您的大部分问题都可以使用 grep 解决,请考虑编写一个 shell 脚本,或者使用 Python 之类的脚本语言而不是 C++ 程序。

        【讨论】:

        • 我的程序只返回模式匹配的一堆文件。我只需要编写一个 C/C++ 程序,不幸的是 C/C++ 没有用于正则表达式的标准库。
        • 你还没有解释为什么这必须在 C 或 C++ 中。当前的 C++ 标准没有正则表达式(下一个会有),但是有很多常用的实现,例如来自 Boost 的实现。
        • C/C++,因为我被指示这样做。
        • @Obscured 执行 system() 的操作,但捕获输出。仍然很慢,但正如我所说,这可能无关紧要。你总是毫无疑问地做你被告知的事情吗?对程序员来说态度不好。
        • C++ 有一个用于正则表达式的标准库,或者类似于:Boost.Regex
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-28
        • 1970-01-01
        相关资源
        最近更新 更多