есть ли такая функция, как getdelim с ++? - PullRequest
0 голосов
/ 12 февраля 2010

Есть ли в c ++ функция, которая работает как функция getdelim в c? Я хочу обработать файл с использованием объекта std :: ifstream, поэтому я не могу использовать здесь getdelim. Любая помощь приветствуется. Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 февраля 2010

getline, и свободная функция для std :: string, и член для буферов символов имеют перегрузку, принимающую разделитель (BTW getdelim является расширением GNU)

1 голос
/ 12 февраля 2010

Если вы можете использовать Boost, я рекомендую библиотеку Tokenizer . В следующем примере токенизируется поток с использованием пробелов и точек с запятой в качестве разделителей:

#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
#include<algorithm>

int main() {

   typedef boost::char_separator<char> Sep;
   typedef boost::tokenizer<Sep> Tokenizer;

   std::string str("This :is: \n a:: test");
   Tokenizer tok(str, Sep(": \n\r\t"));
   std::copy(tok.begin(), tok.end(), 
             std::ostream_iterator<std::string>(std::cout, "\n"));
}

Выход:

This
is
a
test

Если вы хотите токенизировать содержимое входного потока, это можно сделать легко:

 int main() {

     std::ifstream ifs("myfile.txt");
     typedef std::istreambuf_iterator<char> StreamIter;
     StreamIter file_iter(ifs);

     typedef boost::char_separator<char> Sep;
     typedef boost::tokenizer<Sep, StreamIter> Tokenizer;

     Tokenizer tok(file_iter, StreamIter(),  Sep(": \n\r\t"));

     std::copy(tok.begin(), tok.end(), 
             std::ostream_iterator<std::string>(std::cout, "\n"));
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...