【发布时间】:2016-11-28 22:39:22
【问题描述】:
我有一个文本文件,每行都有一个名称/位置。是否有一种简单的方法可以根据用户输入的前缀搜索文本文件并打印以该前缀开头的每一行。
【问题讨论】:
-
请定义简单!
标签: c++ search text-files
我有一个文本文件,每行都有一个名称/位置。是否有一种简单的方法可以根据用户输入的前缀搜索文本文件并打印以该前缀开头的每一行。
【问题讨论】:
标签: c++ search text-files
基本上,您应该遍历文件的每一行并检查其内容。这可以通过 ifstream 来完成,如下所示:
ifstream file("text.txt");
if (file.is_open())
{
string line;
while (std::getline(file, line))
{
// match
}
}
匹配项目的实际方法取决于前缀的复杂性。
对于简单的情况,您可以只使用字符串compare 方法。例如:
if (!line.compare(0, matchSize, matchPrefix))
{
std::cout << line << std::endl;
}
或string::find 并检查0 的结果。
如果匹配条件更复杂,您可以尝试使用regular expressions。但是,这取决于用户期望的前缀的实际格式。
您还应该考虑区分大小写是否存在问题,并使用std::transform 和toupper/tolower 预处理比较的字符串,或者编写自己的谓词以与std::equal 一起使用。例如:
string prefix = "ab";
bool match = std::equal(prefix.begin(), prefix.end(), line.begin(), [](const char& c1, const char& c2)
{
return tolower(c1) == tolower(c2);
});
如您所见,此类问题有很多解决方案(甚至更多)。采用哪一种取决于具体要求和用户输入的处理情况。
【讨论】: