在 C/C++ 程序中使用 grep 进行模式匹配是否可取



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

所以,我想要一些建议。帮帮我。

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

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

使用 grep 意味着你很快就会运行你的程序,因为你没有太多东西要学。 使用正则表达式库意味着程序运行得更快。

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

答案取决于每个文件的大小。 如果它们非常大,则使用哪种方法的速度差异不大。 如果很小,它会。

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

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

最新更新