разделить функцию для С++

Есть ли функция разделения типа для С++, похожая на Java? Я знаю об игнорировании, но не совсем понимаю, как это сработает в моем случае.

Мой ввод:

{
  item = ball
  book = lord of the rings
  movie = star wars
}

Мой ввод - это <attribute> = <value>, и я должен сохранить два в разных строках или целых числах (в зависимости от значения, например, если это число, используйте целое число).


person SNpn    schedule 28.09.2011    source источник
comment
Что вы подразумеваете под «игнорировать» и почему вы думаете, что шаблоны имеют какое-то отношение к разбиению строк? См. документ для std::string, чтобы узнать, что у него есть.   -  person bmargulies    schedule 28.09.2011
comment
@bmargulies есть функция типа str.split("=") в java API и есть функция типа cin.ignore(1,=)` в c++ API, я пытался использовать игнорирование, но я не знаю, как просто получить избавиться от парантеза   -  person SNpn    schedule 28.09.2011
comment
возможный дубликат Как разбить строку в C++?   -  person Pablo Santa Cruz    schedule 28.09.2011
comment
Я думаю, что он может использовать ответ из этого (на самом деле я бросил его в свой), но он мог искать что-то, что можно было бы просто обозначить знаком =, что не было бы охвачено этим вопросом, поэтому я думаю, что это немного другое .   -  person John Humphreys    schedule 28.09.2011


Ответы (2)


Используйте Boost::tokenizer, поскольку он делает то, что вам нужно. сделать. Из руководства:

// simple_example_1.cpp
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>

int main(){
   using namespace std;
   using namespace boost;
   string s = "This is,  a test";
   tokenizer<> tok(s);
   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
   }
}
person Sardathrion - against SE abuse    schedule 28.09.2011
comment
Работает с icc и g++. У вас установлен буст? Какую ошибку вы получаете? - person Sardathrion - against SE abuse; 28.09.2011

Используйте strtok(): http://www.cplusplus.com/reference/clibrary/cstring/strtok/.

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

и РЕДАКТИРОВАТЬ:

Это очень классное SO-решение, которое будет токенизировать всю строку пробелами — вам придется обрабатывать значения вместе после =, но это хорошо научит вас STL :)

Разделить строку в C++?

person John Humphreys    schedule 28.09.2011
comment
Если он недостаточно реентерабельный для вызова вложенных циклов, он определенно не является потокобезопасным - я подумал, что любому, кто спрашивает, как разбить строку, не нужно беспокоиться об этой сложности: p - person John Humphreys; 28.09.2011
comment
@ w00te strtok не будет работать в моем случае ... так как я могу ввести данные, похожие на item = baseball bat, а бейсбольная бита должна быть одной строкой, strtok разделит ее на два слова. - person SNpn; 28.09.2011