C ++字符串为bool

时间:2014-12-09 18:36:25

标签: c++ string boolean

我认为我的字符串bool功能无法正常工作。它无法处理条件 -

  

! ! ! !真实&&   真

。它应该打印1而不是0。

bool to_bool(string str) {
    transform(str.begin(), str.end(), str.begin(), ::tolower);
    istringstream is(str);
    bool b;
    is >> boolalpha >> b;
    return b;
}


int main()
{
    if(to_bool("! ! ! ! true && true"))
        cout <<1;
    else
        cout <<0;
    return 0;
}

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我不知道为什么你期望std::istream解析和评估布尔表达式,但根据文档它不应该(来自http://en.cppreference.com/w/cpp/locale/num_get/get):

  

如果v的类型为boolboolalpha!=0,则替换为以下内容   阶段2和3:从输入迭代器获得的连续字符   in与从中获得的字符序列匹配   std::use_facet<std::numpunct<charT>>(str.getloc()).falsename()和   std::use_facet<std::numpunct<charT> >(str.getloc()).truename()仅作为   必要的,以确定唯一的匹配。输入迭代器是   相比之下,只有在必要时才能获得一个角色。如果   目标序列唯一匹配,v设置为相应的   博尔价值。否则false存储在v和std::ios_base::failbit中   被分配给错误。如果在之前找不到唯一匹配   输入已结束(in==end)err|=std::ios_base::eofbit已执行。

答案 1 :(得分:2)

我很惊讶没人提到这个:

bool b;
istringstream("1") >> b;

bool b;
istringstream("true") >> std::boolalpha >> b;

答案 2 :(得分:0)

你说:

  

它应该打印1而不是0。

您没有检查is >> boolalpha >> b;是否已成功将任何内容读入b

这里有一些尝试:

is >> boolalpha >> b;
if ( ! is.good() )
{
    // Do something to deal with the error.
}