C++字符串到布尔值
C++ string to 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;
}
有什么想法吗?
我很
惊讶没有人提到这个:
bool b;
istringstream("1") >> b;
或
bool b;
istringstream("true") >> std::boolalpha >> b;
我不知道
为什么您希望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 而不是 0。
您没有检查is >> boolalpha >> b;
是否成功地将任何内容读入b
。
可以尝试以下操作:
is >> boolalpha >> b;
if ( ! is.good() )
{
// Do something to deal with the error.
}
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 提升灵气 - 将字符串解析为布尔值
- boost::带有布尔值和字符串的变体
- 检查字符串中的小写字符或空格.布尔值不起作用
- 如何在类中将布尔值更改为字符串?
- 从常量字符串到布尔值的隐式强制转换
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- 字符串和布尔值(Int 条件为假)C++
- 使用字符串流输入/输出布尔值
- 对循环和字符串函数中的指针的操作以及布尔值
- 如何在 lambda 中返回字符串而不是布尔值
- C++字符串到布尔值
- 在C++中将字符串评估为布尔值
- C++字符串比较返回0,但布尔值返回false
- C++ - 无法从 std::基本字符串<char>转换为布尔值
- 布尔值转换为字符串,并将boolalpha与一个方法组合在一起,而不是在打印时单独键入它
- 为什么在成功将布尔字符串值转换为布尔值时,istringstream eof 标志没有变为真?
- 为什么将布尔值隐式转换为字符串不是错误?