如何在文件中找到2个单词的字符串?

时间:2014-02-25 02:13:57

标签: c++

使用以下代码,我可以找到1个字的字符串(在本例中我正在寻找“Word”):

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

但如果我想找到一个由两个单词组成的“电脑屏幕”,它就不起作用。

由于

2 个答案:

答案 0 :(得分:2)

file>> str读取用空格分隔的参数(在本例中为字符串)。如果要读取整行(或者在任何情况下,一次读取多个单词),可以使用getline运算符(默认情况下读取由换行符分隔的字符串)。

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

答案 1 :(得分:0)

如果您知道有两个单词及其内容,那么您只需要:

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;
}

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

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