显示结构C ++成员的相同值

时间:2019-06-12 18:37:57

标签: c++ struct

我有一个包含的几何图形列表:图形和体积代码。 例如:

  

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];

1 个答案:

答案 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 |  
+-------+-----+