C++ 将文件中的双值数字读入C++;并获取他们的价值观

C++ 将文件中的双值数字读入C++;并获取他们的价值观,c++,arrays,vector,C++,Arrays,Vector,我试图从文本文件或csv文件中读取存储在同一行上的两个数字的双值,用逗号分隔,并将其读入向量中。数字以如下格式存储[1688.37115.14]。我想从文件中读取这些数字,然后存储在数组中,以便可以访问第一个和第二个数字。我的代码可以编译,但不会显示数字。这里是C++中的代码。p> ifstream file("C:/arrow1.txt",ios::app); double s; std::vector<double> data; while(file>>s){ dat

我试图从文本文件或csv文件中读取存储在同一行上的两个数字的双值,用逗号分隔,并将其读入向量中。数字以如下格式存储[1688.37115.14]。我想从文件中读取这些数字,然后存储在数组中,以便可以访问第一个和第二个数字。我的代码可以编译,但不会显示数字。这里是C++中的代码。p>
ifstream file("C:/arrow1.txt",ios::app);
double s;
std::vector<double> data;
while(file>>s){
data.push_back(s);
              }
   for(int i=0; i<data.size(); i++){
   std::cout<<data[i]<<std::endl;
              }
ifstream文件(“C:/arrow1.txt”,ios::app);
双s;
std::矢量数据;
而(文件>>s){
数据。推回;
}

对于(int i=0;i您可以将第二次尝试与
atof()
()结合使用。它将
字符串
转换为
双精度

将第一个数字复制到第二个字符串中,然后使用
atof()

例如:

// Your copied values from the file
std::string s1 = "[1688.37,";
std::string s2 = "115.14]";

// Copy the number without "[" and ",", the length of the number is variable
std::string str1 = s1.substr(1, s1.length()-1); // Copy the first number in str1
double firstNum = atof(str1.c_str());
cout << firstNum << endl;

// Copy the second number without "]"
std::string str2 = s2.substr(0, s2.length()-1); // Copy the second number in str2
double secondNum = atof(str2.c_str());
cout << secondNum << endl;
//从文件中复制的值
std::string s1=“[1688.37]”;
std::string s2=“115.14]”;
//复制不带“[”和“,”的数字,数字的长度是可变的
std::string str1=s1.substr(1,s1.length()-1);//复制str1中的第一个数字
double firstNum=atof(str1.c_str());

cout如果在下面的示例中声明为
s
istream
(无论是
stringstream
ifstream
)包含格式为
[float1,float2]
的任意行数的良好定义模式,您可以使用
>
操作符(在这种情况下为流提取操作符)在流上读取值,并调用
get
读取
[
]
换行符,如以下示例所示:

std::vector<double> fpvec;
char c;
double in;
while( s.eof() == false)
{
    s.get(c);
    s >> in;
    fpvec.push_back(in);
    s.get(c);
    s >> in;
    fpvec.push_back(in);
    s.get(c);
    s.get(c);

    // Print last two inserted elements - testing purposes only
    unsigned int size = fpvec.size();
    std::cout << fpvec[size-2] <<" and "<< fpvec[size-1] << std::endl;
}
std::vector fpvec;
字符c;
双进;
while(s.eof()==false)
{
s、 get(c);
s>>中;
fpvec.推回(in);
s、 get(c);
s>>中;
fpvec.推回(in);
s、 get(c);
s、 get(c);
//打印最后两个插入的元素-仅用于测试
unsigned int size=fpvec.size();

std::你能添加示例文件内容并正确设置代码格式吗?我不明白应该添加什么?我不得不说,文件中存储的数字是未知的。A它们来自其他程序的输出,但我不知道输出是什么。std::string的
>
运算符使用空格to解析文本。因此,使用OP的示例“[1688.37,115.14]”,在第二个代码示例中添加到向量的
std::string
实例将是“[1688.37”和“115.14]”。因此,此时字符串还没有准备好使用
atof()
。我尝试过使用atof()但出现错误。有人能给我正确的代码如何使用吗?@GigaRohan这就是为什么我建议将数字复制到第二个字符串中。我认为这是摆脱
[],
的最简单方法,但如果我将数字复制到第二个字符串中,我将得到[1688.37]。那么如何摆脱“[”和“,”?好的。明白了。在这种情况下,std::string s1=vs[0];std::string s2=vs[1];@user3035413-如果没有“[”、“,”和“]”字符,我想?如果只有一行用逗号分隔的两个双精度字符,并且该行用[and]换行,那么输出应该是“1688.37和115.14”.看看这个:@user3035413,你得到了fpvec向量中的数字!这不是你想要的吗?是的。谢谢@ll fotanswers@user3035413ifstream和stringstream都以istream为基础,我提供的代码可以与它们一起使用。对不起,还有一件事。如果文件有两行两个数字。我们假设文件格式如下[1874.2244.465][1453.13,246.315]。第一行是[1874.2244.465],第二行是[1453.13,246.315]。看起来像矩阵2x2
std::vector<double> fpvec;
char c;
double in;
while( s.eof() == false)
{
    s.get(c);
    s >> in;
    fpvec.push_back(in);
    s.get(c);
    s >> in;
    fpvec.push_back(in);
    s.get(c);
    s.get(c);

    // Print last two inserted elements - testing purposes only
    unsigned int size = fpvec.size();
    std::cout << fpvec[size-2] <<" and "<< fpvec[size-1] << std::endl;
}