如何在文件中找到一个由2个单词组成的字符串

How to find a string of 2 words in a file?

本文关键字:一个 2个 单词组 字符串 文件      更新时间:2023-10-16

使用以下代码,我可以找到一个由1个单词组成的字符串(在本例中,我正在寻找"word"):

ifstream file("file.txt");
string str;
while (file >> str){
if (str.find("Word") != string::npos){
////
}
}

但如果我想找到,例如,"电脑屏幕",它是不起作用的,它是由两个单词组成的。

感谢

str读取用空格分隔的参数(在本例中为字符串)。如果您想读取整行(或者在任何情况下,一次读取多个单词),可以使用getline运算符(读取默认情况下由换行符分隔的字符串)。
ifstream file("file.txt");
string str;
while (std::getline (file,str)){
if (str.find("Computer screen") != string::npos){
////
}
}

如果你知道有两个单词以及它们是什么,你只需要这个:

ifstream file("file.txt");
string str;
while (file >> str){
if (str.find("Computer") != string::npos){
file >> str;
if (str.find("screen") != string::npos) {
////
}         
}
}

但更有可能的是,您要求找到一个可能是两个单词、三个或更多单词的字符串。

那么,你能指望字符串在一行上吗?在这种情况下,@Ashalynd的解决方案将起作用。但如果绳子可能断了,它就会失灵。然后你需要处理这个案子。

如果你的文件很"小",也就是说,可以很容易地放入内存,读取整个文件,删除换行符并搜索字符串。

如果它太大,请成对逐行阅读。

类似这样的东西:

std::ifstream file("file.txt");
std::string str[2];
int i = 0;
std::getline (file,str[i]);
++i;
while (std::getline (file,str[i]))
{
int next_i = (i+1)%2;
std::string pair = str[next_i] + " " + str[i];
if (pair.find("Computer screen") != std::string::npos)
{
////
}
i = next_i;
}

所有这些都假设字符串中单词之间可能的空白是单个空格或换行符。如果有一个换行符有更多的空白(例如制表符),您需要用空白的正则表达式替换搜索字符串中的空白,或者实现一个更复杂的状态机

此外,考虑是否需要管理大小写,可能是在匹配之前将所有字符串转换为小写。

相关文章: