c++读取格式如下的数据:111(点号) 4900.3527(x) 55.7205(y) -1232.5197(z) 1 112 4901.7747 55.4432 -832.7152 1...其中点号为乱序,且有跳过的点号,如点116就无对应点号的数据。要求以数组格式存储,每个点存储于点号对应的数组的位置(如点号111的点存储于a[111]初)
时间: 2024-02-18 13:59:04 浏览: 61
您可以使用C++中的map来存储每个点的信息,map的键为点号,值为对应的点信息,点信息可以使用结构体来存储。下面是一个示例代码:
```c++
#include <iostream>
#include <fstream>
#include <map>
using namespace std;
struct Point {
double x; // x坐标
double y; // y坐标
double z; // z坐标
int attr; // 点的属性
};
int main() {
map<int, Point> points; // 定义map,键为点号,值为点信息
ifstream fin("data.txt"); // 打开数据文件
while(!fin.eof()) {
int id;
double x, y, z;
int attr;
fin >> id >> x >> y >> z >> attr;
if(fin.eof()) break; // 判断是否到文件末尾
Point p;
p.x = x;
p.y = y;
p.z = z;
p.attr = attr;
points[id] = p; // 将点信息存储到map中,以点号为键
}
fin.close(); // 关闭文件
// 输出每个点的信息
for(auto it = points.begin(); it != points.end(); it++) {
cout << "点号:" << it->first << endl;
cout << "x坐标:" << it->second.x << endl;
cout << "y坐标:" << it->second.y << endl;
cout << "z坐标:" << it->second.z << endl;
cout << "属性:" << it->second.attr << endl;
cout << endl;
}
return 0;
}
```
上述代码将数据文件命名为"data.txt",可以根据实际情况进行修改。在读取数据时,使用了循环和文件结束标志eof(),可以自动识别文件末尾。读取后的每个点的信息都被存储在map中,可以根据点号直接在对应下标数组找到对应的点信息。如果有缺失的点号,则在map中不会存储对应的点信息。
阅读全文