2012-06-05 11 views
0

Я думаю, что это не сложный вопрос, но я хочу знать, как это сделать на C++. Я хочу искать позицию определенного слова или последовательности.Поиск слова в текстовом файле с использованием инструкций std

Я прочитал это сообщение stack similar question и ответ выглядит великолепно. Но я не знаю, как применить это решение с файлом. Эта инструкция std легко применить в a или a, но я не знаю, как применить к файлу и последовательности.

Инструкция:

std::ifstream file; 
std::search(std::istreambuf_iterator<char>(file.rdbuf()) // search from here 
      , std::istreambuf_iterator<char>()    // ... to here 
      , pSignature         // looking for a sequence starting with this 
      , pSignature+sigSize);       // and ending with this 

Могу ли я использовать строку, чтобы сохранить последовательность искать в файле ???

Может ли кто-нибудь опубликовать простой пример того, как применить инструкцию поиска, я всегда obatin и большая ошибка при компиляции.

Я не использую окна и не хочу использовать библиотеку Boost.

Заранее спасибо.

ответ

4

Прочитайте файл в строке (при условии, что он не огромен). Затем вы можете использовать метод string :: find или std ::.

using namespace std; 

// read entire file into a string 
ifstream file(".bashrc"); 
string contents((istreambuf_iterator<char>(file)), istreambuf_iterator<char>()); 

string needle = "export"; 

// search using string::find 
size_t pos = contents.find(needle); 
cout << "location using find: " << contents.find(needle) << endl; 

// search using <algoritm>'s search 
string::const_iterator it = search(contents.begin(), contents.end(), needle.begin(), needle.end()); 
cout << "location found using search: " << string(it, it + 10) << endl; 
cout << " at position: " << it - contents.begin() << endl; 

[EDIT] Вы также можете осуществлять поиск с istreambug_iterators напрямую, но оставляет вас с такой же итератор.

istreambuf_iterator<char> it2 = search(
     istreambuf_iterator<char>(file), istreambuf_iterator<char>(), 
     needle.begin(), needle.end()); 
+0

, и если это большой файл, просто прочитайте его в разделах и компенсируйте его;) –

+0

Спасибо за ответ. –

Смежные вопросы