我认为我的字符串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;
}
有什么想法吗?
答案 0 :(得分:2)
我不知道为什么你期望std::istream
解析和评估布尔表达式,但根据文档它不应该(来自http://en.cppreference.com/w/cpp/locale/num_get/get):
如果v的类型为
bool
和boolalpha!=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.
}