【问题标题】:Comma separated floats in C++C ++中的逗号分隔浮点数
【发布时间】:2024-04-22 19:30:02
【问题描述】:

我正在尝试分隔一个数字列表,例如:34,45,12.3,100,34.6,50

只有在没有这样的小数时我才能做到:

#include <vector>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
    std::string str = "34,45,12.3,100,34.6,50";
    std::vector<int> vect;

    std::stringstream ss(str);

    int i;

    while (ss >> i)
    {
        vect.push_back(i);

        if (ss.peek() == ',')
            ss.ignore();
    }

    for (i=0; i< vect.size(); i++)
        std::cout << vect.at(i)<<std::endl;

}

这里的问题是小数。以上将产生:

34 45 12 3 100 34 6 50

虽然它应该产生:

34 45 12.3 100 34.6 50

基本上,当上面的代码看到一个点'.' 时,它的行为就好像它是一个逗号。

有什么想法吗?

【问题讨论】:

  • 你有一个 int 的整数向量,因此它不能包含浮点数;它们被截断为整数部分。更改您的向量,使其元素为浮点数。
  • i 应该是float
  • 这是*.com/questions/1120140/… 的副本(但出于某种原因,我认为在此处将其标记为这样并关闭它是正确的)。
  • 你应该了解整数和浮点数的区别。提示:整数没有小数部分,所以没有小数点。
  • 不要重复使用变量!声明两个独立的。 (例如,您在 for 循环中重用 i。)

标签: c++ io


【解决方案1】:

您应该使用浮点数并将代码更改为使用浮点数而不是整数:

#include <vector>
#include <string>
#include <sstream>
#include <iostream>

int main()
{
    std::string str = "34,45,12.3,100,34.6,50";
    std::vector<float> vect;

    std::stringstream ss(str);

    float i;

    while (ss >> i)
    {
        vect.push_back(i);

        if (ss.peek() == ',')
        ss.ignore();
    }

    for (i=0; i< vect.size(); i++)
    std::cout << vect.at(i)<<std::endl;

}

【讨论】:

    【解决方案2】:

    您应该声明 float i 而不是 int i 并将向量声明为浮点向量而不是整数向量。这是因为 12.4 不是整数,而是浮点数。

    【讨论】:

      【解决方案3】:

      我认为您的代码将 12.3 解释为两个不同的数字,因为您尚未将该数字声明为浮点数。您的向量将所有字符串保存为整数,而不是浮点数。如果您将向量声明为浮点数而不是整数,那么您的问题应该得到解决

      【讨论】: