Токенизация строки внутри переключателя

Я токенизирую строку, основанную на разделителе (используя Boost Tokenizer), а затем делаю вещи с токенами, основанными на значении переменной состояния.

Проблема, с которой я столкнулся: в одном из случаев требуется, чтобы строка была размечена. Это приводит к ошибкам, потому что переменные tok1 и token объявлены в регистре. Я пытался объявить их вне коммутатора и просто назначить их внутри корпуса, но это не работает.

Кто-нибудь знает способ, как я могу сделать это, или есть ли лучший способ пойти дальше токенизации строки внутри корпуса? Спасибо!

Пример кода ниже:

 boost::char_separator<char> sep(TOKEN_DELIMETER_NEWLINE);
boost::char_separator<char> sep2(TOKEN_DELIMETER_SPACE);
tokenizer tok(_text, sep);

while(lineToken!=tok.end())
{
switch(state)
{
case FIRST_STATE:

lineToken++;
tokenizer tok1(*lineToken, sep2);
tokenizer::iterator token=tok1.begin();

break;
// Other Cases follow...
}

}

0

Решение

После заполнения пробелов я составил следующее:

std::string _text1 = "The rain,In Spain,Lies Mainly,On the plain";

boost::char_separator<char> sep(",");
boost::char_separator<char> sep2(" ");
boost::tokenizer<boost::char_separator<char>> tok(_text1,sep);
boost::tokenizer<boost::char_separator<char>>::iterator lineToken = tok.begin();
unsigned int state = 0;

while(lineToken!=tok.end())
{
switch(state)
{
case 0:
lineToken++;
boost::tokenizer<boost::char_separator<char>> tok1(*lineToken, sep2);
boost::tokenizer<boost::char_separator<char>>::iterator token=tok1.begin();

break;
// Other Cases follow...
}
}

Это работает для меня — ну, это компилирует и токенизирует … Обратите внимание, что мой пример не похож на ваш в том, что приращение итератора вызовет сбой до конца, потому что я не делаю никакой проверки …..

Может быть, вы не использовали шаблон или пропустили его?

1

Другие решения

попробуйте поместить «{}» вокруг новых переменных стека, что-то вроде этого,

    case FIRST_STATE:

{

        lineToken++;
tokenizer tok1(*lineToken, sep2);
tokenizer::iterator token=tok1.begin();

}

    break;
0

По вопросам рекламы [email protected]