在 C/C++ 程序中使用 grep 进行模式匹配是否可取
Using Grep For Pattern Matching Within A C/C++ Program Is Advisable Or Not?
我必须编写一个C/C++程序来处理一堆文本文件(大约100个)并找到一个模式(通常是字符串)。由于我将要运行的平台将是 unix,我想为什么不在我的程序中使用 grep 系统命令,因为它非常快速和有效。但是,我的朋友说在程序中使用system("grep...")是不可取的。他建议我使用字符串模式匹配算法,我觉得这会减慢程序的速度。
所以,我想要一些建议。帮帮我。
不知道你的程序要做什么,很难说。但是通过 system() 运行命令会大大减慢程序的速度,尽管这可能并不重要。无论你做什么,如果正则表达式可以解决问题,不要编写自己的字符串匹配代码 - 使用许多现有的正则表达式库之一。如果你的大部分问题都可以使用 grep 解决,请考虑编写 shell 脚本,或者使用 Python 等脚本语言而不是C++程序。
你的两个主要选择是(a)使用grep,或(b)使用链接到你的C或C++程序的库,它提供正则表达式。
使用 grep 意味着你很快就会运行你的程序,因为你没有太多东西要学。 使用正则表达式库意味着程序运行得更快。
快多少? 速度的主要提高是因为您没有为这 100 个文件中的每一个设置新进程并运行新程序。 这种速度节省有多大?
答案取决于每个文件的大小。 如果它们非常大,则使用哪种方法的速度差异不大。 如果很小,它会。
如果您决定使用正则表达式库,我的猜测是它们的速度都差不多。 我选择了我熟悉的东西,因为我知道 Perl:Perl 兼容的正则表达式库。
使分叉和使用exec系列命令使用grep并将其结果保存在文件中。在主要等待进程结束。然后在 main 中打开文件并使用结果。
相关文章:
- 模式匹配文本并提取C++中的数据
- 如何在CLIPS中优化不同模板事实之间的模式匹配
- Flex Lexer 模式匹配句子分隔符/标点符号作为 URL 路径部分
- C++中的模式匹配
- 模式匹配函数的时间测量无法正常工作
- C++向量的模式匹配
- 从.cpp文件中提取与模式匹配的"if"块
- 在某些情况下,通配符模式匹配失败
- 如何使用C++模板魔术来对类型进行模式匹配
- 使用 std::regex_search 获取与模式匹配的所有文件和文件夹
- 正则表达式匹配是否保证始终只关注最后一个模式?C++
- 在 c++-17 中特化的模式匹配中 lambda 的拆分函数签名
- C++;仅当用户输入与预设模式匹配时才接受用户输入
- Visual Studio混合模式调试是否可以附加到Jupyter笔记本以同时调试C++和Python
- 下一个最大的整数,有一些中间位与模式匹配?
- 模板模式匹配
- 我的双重检查锁定模式实现是否正确?
- 用于多个级联字符串的同步模式匹配算法
- 使用C++功能在系统路径中进行模式匹配
- 在 C/C++ 程序中使用 grep 进行模式匹配是否可取