相关疑难解决方法(0)

如何测试stringstream operator >>是否解析了错误类型并跳过它

我有兴趣讨论用于stringstream解析具有多种类型的行的方法.我将从查看以下行开始:

"2.832 1.3067 nana 1.678"
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我有一个有多个strings和的长行doubles.解决这个问题的显而易见的方法是将字符串标记化,然后检查转换每个字符串.我有兴趣跳过第二步,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;
 }
Run Code Online (Sandbox Code Playgroud)

它将打印出以下内容:

2.832
1.3067
Failed!
0
Failed!
0
Run Code Online (Sandbox Code Playgroud)

我没有惊讶它没有解析一个字符串,但内部发生了什么,以至于它无法清除它failbit并解析下一个数字?

c++ stringstream

30
推荐指数
2
解决办法
2万
查看次数

如何直接从输入流向集合中插入值?

如何将输入直接从输入流插入到集合容器中?

这就是我需要的

while(n--)
{
    cin>>s.emplace();
}
Run Code Online (Sandbox Code Playgroud)

假设,我需要获取 n 个输入并将容器名称设置为 's'

while(n--)
{
    int x;
    cin>>x;
    s.emplace(x);
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我需要削减这一步。

c++ stl set c++11

2
推荐指数
1
解决办法
734
查看次数

标签 统计

c++ ×2

c++11 ×1

set ×1

stl ×1

stringstream ×1