C++字符串到布尔值

C++ string to bool

本文关键字:布尔值 字符串 C++      更新时间:2023-10-16

我认为我的字符串到布尔函数无法正常工作。它无法处理条件 -

!!!

!!! !! 真

.它应该打印 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 的类型是 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 而不是 0。

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

可以尝试以下操作:

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