C++ 在开关盒内标记字符串

C++ 在开关盒内标记字符串,c++,boost-tokenizer,C++,Boost Tokenizer,我正在基于分隔符(使用boosttokenizer)对字符串进行标记化,然后根据状态变量的值对标记进行处理 我遇到的问题是:其中一种情况需要进一步标记字符串。这会导致错误,因为tok1和令牌迭代器变量在本例中声明。我曾尝试在交换机外部声明它们,并在机箱内部分配它们,但这不起作用 是否有人知道我如何实现这一点,或者是否有更好的方法来进一步标记案例中的字符串?谢谢 示例代码如下: boost::char_separator<char> sep(TOKEN_DELIMETER_NEWLI

我正在基于分隔符(使用boosttokenizer)对字符串进行标记化,然后根据状态变量的值对标记进行处理

我遇到的问题是:其中一种情况需要进一步标记字符串。这会导致错误,因为tok1和令牌迭代器变量在本例中声明。我曾尝试在交换机外部声明它们,并在机箱内部分配它们,但这不起作用

是否有人知道我如何实现这一点,或者是否有更好的方法来进一步标记案例中的字符串?谢谢

示例代码如下:

 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...
    }

}
boost::字符分隔符sep(TOKEN\u DELIMETER\u NEWLINE);
boost::字符分隔符sep2(令牌数据表空间);
标记器tok(_text,sep);
while(lineToken!=tok.end())
{
开关(状态)
{
案例一缔约国:
lineToken++;
标记器tok1(*lineToken,sep2);
标记器::迭代器标记=tok1.begin();
打破
//其他案例如下。。。
}
}
尝试在新的堆栈变量周围放置“{}”,类似这样

    case FIRST_STATE:
{

}


在填补空白后,我编写了以下内容:

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...
}
}
std::string\u text1=“西班牙的雨主要在平原上”;
boost::字符分隔符sep(“,”);
boost::字符分隔符sep2(“”);
boost::标记器tok(_text1,sep);
boost::tokenizer::迭代器lineToken=tok.begin();
无符号整数状态=0;
while(lineToken!=tok.end())
{
开关(状态)
{
案例0:
lineToken++;
boost::tok1(*lineToken,sep2);
boost::tokenizer::iterator token=tok1.begin();
打破
//其他案例如下。。。
}
}
这对我来说很有用——它编译并标记了。。。。请注意,我的示例与您的示例不同,因为迭代器的增量将在结束之前导致崩溃,因为我不进行任何检查


可能您没有使用模板或遗漏了模板?

是一个
if语句
选项吗?
    break;
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...
}
}