我有一个包含的几何图形列表:图形和体积代码。 例如:
001 213.1
002 414.7
003 718.3
004 414.7
005 718.3
006 114.5
我需要找到重复的volume值并将其显示出来,所以在出口处,我需要获取:
002 414.7
004 414.7
003 718.3
005 718.3
请帮助我
struct Sfere
{
char codsf[5];
float volum;
} sf[100];
答案 0 :(得分:0)
让我们再试一次:
static const unsigned int ID_CAPACITY = 256;
static const unsigned int MAX_UNIQUE_VOLUMES = 512;
struct Record
{
double volume;
int ids[ID_CAPACITY];
unsigned int ids_size;
};
Record database[MAX_UNIQUE_VOLUMES];
int main()
{
double volume;
int id;
static const double epsilon = 1e-06;
unsigned int database_size = 0U;
std::ifstream input_file("data.txt");
while (input_file >> id >> volume)
{
bool volume_is_duplicate(false);
// Find a duplicate volume
for (unsigned int i = 0U; i < database_size; ++i)
{
const double volume_from_database = database[i].volume;
const double diff = std::abs(volume - volume_from_database);
if (diff < epsilon)
{
unsigned int id_index = database[i].ids_size;
database[i].ids[id_index] = id;
++(database[i].ids_size);
duplicate_volume = true;
break;
}
}
if (!duplicate_volume)
{
Record r;
r.volume = volume;
r.ids[0] = id;
r.ids_size = 1;
database[database_size] = r;
++database;
}
}
std::cout << "\n\nPaused. Press ENTER to continue.\n";
std::cin.ignore(100000, '\n');
return 0;
}
在上述程序中,将记录作为两个单独的变量读入。在数据库中搜索等效卷。如果存在等效的卷,则将新值附加到ID容器。如果卷是唯一的,则记录将附加到数据库。
将数据库打印留作OP的练习(以及边界/范围检查)。
技巧 此处是根据卷而不是ID来组织数据库。每个数据库记录将包含等效卷的ID:
vol. IDs
+-------+-----+
| 213.1 | 001 |
+-------+-----+-----+
| 414.7 | 002 | 004 |
+-------+-----+-----+
| 718.3 | 003 | 005 |
+-------+-----+-----+
| 114.5 | 006 |
+-------+-----+