【问题标题】:how to use stringstream to convert a string to an int and to a double at the same time如何使用 stringstream 将字符串同时转换为 int 和 double
【发布时间】:2017-03-07 22:14:31
【问题描述】:

如何使用 stringstream 将字符串转换为 int 和 double?

输入将是四位数字,后跟一个句点,然后是另外四位数字 (####.####),我需要将前四位数字提取到一个 int 中,然后整个事情需要做个替身,但我不知道从这里去哪里

    string s;
    cin >> s;
    stringstream ss;
    ss << s;
    int num1; // needs to be int
    ss.str(s);
    ss >> num1;
    ss.clear();
    ss << s;
    double num2; // needs to be a double
    ss >> num2;

例如,假设我们在输入中有1234.5678。阅读完成后,我希望num1 中有1234num2 中有1234.5678

【问题讨论】:

  • 如果num2 必须是double,为什么要将它定义为int
  • 离题:ss.str(s); 有效地重复了ss &lt;&lt; s;
  • 所以,假设您在输入中有1234.5678,并且您有int x; double y; 变量。魔术发生后,你想在x 中拥有什么,你想在y 中拥有什么?我的意思是,确切地说,x 和 y 的值是多少?
  • 太棒了。因此你应该首先忽略'x',而是将整个读入double y;,然后你应该ceil()那个y值,这样你就可以得到它的整数部分——你可以使用ceil()数学函数,或者只是写投int x = (int)y;

标签: c++ stringstream


【解决方案1】:

不需要解析两次,假设数字只有 4 位并且不是很大,double 应该能够精确地保存整数部分,因此您可以在之后将其截断为 int。

stringstream ss("1234.5678");
double foo;
ss >> foo;
int bar = static_cast<int>(foo);

【讨论】:

  • 或者完全跳过 stringstream 并使用 std::stod,正如 R Sahu 建议的那样。
  • @FredLarson 这将是一个很好的解决方案,但不能回答“如何使用 stringstream 将字符串转换为 int 和 double?”的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2017-12-20
相关资源
最近更新 更多