【发布时间】:2011-08-20 15:56:36
【问题描述】:
我必须编写一个 C/C++ 程序来处理一堆文本文件(大约 100 个)并找到一个模式(通常是一个字符串)。由于我要运行的平台是 unix,我想我为什么不在我的程序中使用 grep 系统命令,因为它非常快速和有效。但是,我的朋友说在程序中使用 system("grep...") 是不可取的。他建议我使用字符串模式匹配算法,我觉得这会减慢程序的速度。
所以,我想对此提出一些建议。帮帮我。
【问题讨论】:
我必须编写一个 C/C++ 程序来处理一堆文本文件(大约 100 个)并找到一个模式(通常是一个字符串)。由于我要运行的平台是 unix,我想我为什么不在我的程序中使用 grep 系统命令,因为它非常快速和有效。但是,我的朋友说在程序中使用 system("grep...") 是不可取的。他建议我使用字符串模式匹配算法,我觉得这会减慢程序的速度。
所以,我想对此提出一些建议。帮帮我。
【问题讨论】:
make fork 和使用 exec 系列命令使用 grep 并将其结果保存在文件中。 在主要等待过程结束。 然后在 main 打开文件并使用结果。
【讨论】:
您的两个主要选择是 (a) 使用 grep,或 (b) 使用链接到您的 C 或 C++ 程序的库,该程序提供正则表达式。
使用 grep 意味着您可以很快运行您的程序,因为您不需要学习太多东西。使用正则表达式库意味着您的程序运行得更快。
快多少?速度的主要提高是因为您没有为这 100 个文件中的每一个文件设置一个新进程并运行一个新程序。这种速度节省有多大意义?
答案取决于每个文件有多大。如果它们非常大,那么您使用哪种方法不会产生太大的速度差异。如果很小,它会的。
如果您决定使用正则表达式库,我猜它们的速度都差不多。我选择了我熟悉的东西,因为我知道 Perl:Perl compatible regular expression library。
【讨论】:
不知道你的程序要做什么,很难说。但是通过 system() 运行命令会大大降低你的程序速度,尽管这可能并不重要。无论您做什么,如果正则表达式可以解决问题,请不要编写自己的字符串匹配代码 - 使用许多现有的正则表达式库之一。如果您的大部分问题都可以使用 grep 解决,请考虑编写一个 shell 脚本,或者使用 Python 之类的脚本语言而不是 C++ 程序。
【讨论】: