gpt4 book ai didi

c++ - 意外的字符串流行为

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:08 26 4
gpt4 key购买 nike

考虑以下代码:

#include <sstream>
#include <iostream>

using namespace std;

int main()
{
stringstream ss;

ss << string("12");
int h;
ss >> h;
cout << h << endl;

ss.str(string("")); // clear the content of ss

ss << string("30");
int m;
ss >> m;
cout << m << endl;

return 0;
}

运行上面的代码会产生一些随机输出:

12
0

有时会观察到以下输出:

12
4

我希望输出很简单:

12 
30

为什么我得到了意想不到的结果?

此外,在没有必要的 C++11 支持的情况下,将 string s 解析为 int i 的最佳方法应该是什么?应该是int i = atoi(s.c_str())吗?

最佳答案

当您从流中提取 12 时,您到达了它的末尾,这使它处于错误状态。任何进一步的提取都将失败。您需要调用ss.clear()大约在您清除其内容的时候。

如果您检查了提取是否成功,您就可以避免这个问题。我通常希望将流中的任何提取视为某种条件。

是的,在 C++11 之前,使用字符串流将字符串解析为整数是一种非常合理的方法。我更喜欢它而不是使用 atoi。对于任何想了解 C++11 方式的人,请使用 std::stoi .

关于c++ - 意外的字符串流行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com