将字符串转换为双精度,而字符串有 N 位小数,C++

Converting String to double, while string has N decimals, C++

本文关键字:字符串 小数 C++ 双精度 转换      更新时间:2023-10-16

我想从用户输入中制作一个双精度向量。 这些代码行通常做我希望他们做的事情,除了两种情况,如果还有更多,请告诉我。 这两种情况是如果有两个或多个小数位,以及是否有一个或多个空格。 第二个小数点充当空格。 因此,如果用户输入以下内容:0.2.0.1 或 0.2 0.1,我将为两个实例获得两位小数,它们将是 0.2 和 0.1。 请帮我解决这个问题。 我想确保我正确地完成了这个简单的任务。 我在C++这样做。

欢迎

任何其他建议。

for(int i = 0; i <= ARRSIZE; i++)
{
    cout << "Please enter a decimal value: ";
    if (cin >> sumScores)
    {
        scoresVector.push_back(sumScores);
        cin.clear(); 
        cin.ignore();
    }else
    {
        cout << "This is not a doublen";
        scoresVector.push_back(0);
        cin.clear(); 
        cin.ignore();
        cin.ignore(numeric_limits<streamsize>::max(), 'n'); 
    }
}

有更好的解决方案来处理逐行输入,但它们都需要一些额外的代码。 最简单的方法是使用std::getline读取一行并使用字符串流分析它们。

for (int i = 0; i <= ARRSIZE; i++) {
  std::cout << "Please enter a decimal value: " << std::flush;
  std::string s;
  if (!std::getline(std::cin, s))
    break;
  std::istringstream is(s);
  double d;
  if (is >> d >> std::skipws && is.eof()) {
    scoresVector.push_back(d);
  } else {
    std::cout << "This is not a doublen";
    scoresVector.push_back(0);
  }
}