2016-05-02 5 views
1

Я читаю строки из текстового файла для нахождения их статуса, который имеет 3 варианта, может быть OUT или прекращено или ОтмененоПоиск подстроки в строку в C++

Я делаю так:

ifstream inFile("DVD_list.txt"); 
string line; 
char status; 
while (getline (inFile,line)) { 
    std::size_t pos = line.find("Out" || "Discontinued"|| "Cancelled");  
} 

return 0; 

Как я могу использовать функцию find с выражением или?

+2

find() может принимать только один входной параметр. Поместите список слов в массив и создайте еще один цикл внутри цикла while для поиска каждого слова по одному. –

+0

вы можете использовать 'Регулярные выражения ', этот способ намного быстрее. – gihan

+0

Каково содержание каждой строки в тексте? Это только одно из этих значений или комбинация? –

ответ

0
std::istringstream is("I hope it won't rain today"); 

auto x = std::find(std::istream_iterator<std::string>(is), 
       std::istream_iterator<std::string>(), 
      "rain"); 

if (x != std::istream_iterator<std::string>()) std::cout << *x << std::endl; 

Вот пример кода.

0

find() может просто соответствовать одной константе строки, вам придется называть ее три раза. Но вы могли бы использовать regular expression для соответствия этим трем словам и для обработки всей строки сразу.

+0

Хорошая идея. На самом деле я не живу в C++ 11, поэтому мой другой подход ... – Aconcagua

+0

Это то, что я хочу, но я не мог найти функцию spesific, вы можете мне сказать? – pflove

+0

@pflove, если вы обрабатываете строку сразу с помощью регулярного выражения, как вы можете определить, содержит ли строка одно из трех значений? –

3
if((pos = line.find("Out")) != string::npos) 
{ 
    // handle Out 
} 
else if((pos = line.find("Discontinued")) != string::npos) 
{ 
    // handle Discontinued 
} 
else if((pos = line.find("Cancelled")) != string::npos) 
{ 
    // handle Cancelled 
} 
else 
{ 
    // not found 
} 

Возможно, вам необходимо убедиться, что нет ложных срабатываний не обнаруживается, например, в «какой-то   образца   текста   нет   Output»!