我有一个文件,其数据格式如下:
a 1.000 -1.000 1.000
b 7.89 4.56 2.46
c 50 20 10
我开始编写一些代码来分析文件并将数据存储在结构向量中,但是我不确定如何完成此操作。
struct Coordinates
{
double x;
double y;
double z;
}
vector<Coordinates> aVec;
vector<Coordinates> bVec;
vector<Coordinates> cVec;
ifstream exampleFile;
exampleFile.open("example.txt");
// parse file
while(getline(exampleFile, str))
{
if(str[0] == "a")
{
Coordinates temp;
temp.x = firstNum; // this is where I'm stuck
temp.y = secondNum;
temp.z = thirdNum;
vertVec.push_back(temp);
}
if(str[0] == "b")
{
Coordinates temp;
temp.x = firstNum;
temp.y = secondNum;
temp.z = thirdNum;
vertVec.push_back(temp);
}
if(str[0] == "c")
{
Coordinates temp;
temp.x = firstNum;
temp.y = secondNum;
temp.z = thirdNum;
vertVec.push_back(temp);
}
}
答案 0 :(得分:1)
首先请注意,文件表示为流。
流只是您可以读取的内容。因此,您需要为结构编写流运算符,以便可以读取它们。
git add
它们都继承自git status
。因此,当传递给使用流的函数时,它们的行为相同。
git fetch origin master # this will download all commits from remote to local
# then the local branch "origin/master" will have the information of remote's master branch
git merge origin/master # this will merge "origin/master" to local master
# then the local repository is successfully "recovered"
# you can do a git status to see if they are already clean
首先编写结构,以便它知道如何从流中读取自身。
std::ifstream file("Data"); // This represents a file as a stream
std::cin // This is a stream object that represents
// standard input (usually the keyboard)
现在编写一些代码来读取坐标类型的对象。
std::istream
答案 1 :(得分:0)
代替使用
if(str[0] == "a")
{
Coordinates temp;
temp.x = firstNum; // this is where I'm stuck
temp.y = secondNum;
temp.z = thirdNum;
vertVec.push_back(temp);
}
使用以下内容:
// Construct a istringstream from the line and extract the data from it
std::istringstream istr(str);
char token;
Coordinates temp;
if ( istr >> token >> temp.x >> temp.y >> temp.z )
{
// Use the data only if the extractions successful.
if ( token == 'a' ) // Please note that it's not "a"
{
// Do the right thing for a
}
// Add other clauses.
}
else
{
// Deal with the error.
}