如何测试字符串运算符>是否解析了坏类型并跳过它

如何测试字符串运算符>是否解析了坏类型并跳过它

我对讨论使用的方法很感兴趣stringstream若要分析具有多种类型的行,请执行以下操作。首先,我要看一看下面的一行:

"2.832 1.3067 nana 1.678"

现在让我们假设我有一个长行,其中包含多个stringsdoubles..解决这一问题的明显方法是对字符串进行标记化,然后检查每个字符串的转换。我有兴趣跳过第二步,并使用stringstream直接找到数字。

我想了一个很好的方法来处理这个问题,那就是读取字符串并检查failbit已被设置,如果我尝试将字符串解析为Double,它将被设置为。

假设我有以下代码:

string a("2.832 1.3067 nana 1.678");

 stringstream parser;
 parser.str(a);

 for (int i = 0; i < 4; ++i)
 {
     double b;
     parser >> b;
     if (parser.fail())
     {
         std::cout << "Failed!" << std::endl;
         parser.clear();
     }
     std::cout << b << std::endl;
 }

它将打印以下内容:

2.8321.3067Failed!0Failed!0

我并不奇怪它不能解析一个字符串,但是内部所发生的事情,以致于无法清除其failbit解析下一个号码?


狐的传说
浏览 513回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP