С помощью следующего кода я могу найти строку из 1 слова (в этом примере я ищу "Word"):
ifstream file("file.txt");
string str;
while (file >> str){
if (str.find("Word") != string::npos){
////
}
}
Но это не работает, если я хочу найти, например, "Экран компьютера", который состоит из двух слов.
благодаря
file >> str читает параметр (в данном случае строку), ограниченный пробелом. Если вы хотите прочитать всю строку (или, в любом случае, более одного слова одновременно), вы можете использовать оператор getline (по умолчанию строка строки, помеченная символом новой строки).
ifstream file("file.txt");
string str;
while (std::getline (file,str)){
if (str.find("Computer screen") != string::npos){
////
}
}
'\n'
. Поскольку в вашем текстовом файле нет символа новой строки, он читает до конца файла.
Если вы знаете, что есть два слова и что они есть, все, что вам нужно, это следующее:
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;
}
Все это предполагает, что возможное пустое пространство между словами в строке - это одно пространство или новая строка. Если существует разрыв строки с большим количеством белого пространства (например, вкладки, вам нужно либо заменить белое пространство в строке поиска регулярным выражением для белого пространства, либо реализовать более сложный конечный автомат.
Также подумайте, нужно ли вам управлять случаем, возможно, путем преобразования всех строк в нижний регистр перед совпадением.
str.find("Computer screen")
?file >> str
,str.find("Computer screen")
работать не будет.