计算C中结构体数组中的唯一元素

标签 c struct

我在实现汽车结构时遇到问题,我需要输出车库中每辆车的数量,所以在我的例子中输出应该是: 奥迪3 福特 1 保时捷1 我堆栈了唯一元素的计数,我知道有必要创建字符串数组并遍历我的结构,并在每次到达末尾并且在数组中找不到该元素时添加新元素字符串。

     #include <stdio.h>
     #include <Windows.h>
     #include <time.h>

    typedef struct Auto{
        char Model  [16];
        char Number [8];
        char Color  [10];
        char Name   [16];
    }; 

    int main() {

    int i, j, counter = 0;
    char EnteredModel[16] = { "Audi" };
    struct Auto MyAuto[5] = { { "Audi",   "x007x", "blue",  "Alexander" },
                              { "Ford",   "x777x", "red",   "Andrey" },
                              { "Porsche","a000b", "white", "Oleg"},
                              { "Audi",   "x007x", "blue",  "Sergey"},
                              { "Audi",   "f666f", "black", "Daniel"} };

    //printf("Enter the number of the interested model: ");
    //scanf("%s", &EnteredModel);

    for (i = 0; i < 5; i++) {
        if (i == 0) {
            printf("#####################################################\n");
            printf("#Model           #Number  #Color     #Name          #\n");
            printf("#####################################################\n");
        }
        if (strcmp(MyAuto[i].Model, EnteredModel)) {
            printf("%-17s%-9s%-11s%-17s\n", MyAuto[i].Model, MyAuto[i].Number, MyAuto[i].Color, MyAuto[i].Name);
        }
    }

    for (j = 0; j < 5; j++) {
        for (i = 0; i < 5; i++) {
            if (strcmp(MyAuto[i].Model, MyAuto[j].Model) == 0) {
                counter++;
            }
        }
        printf("%s = %d\n", MyAuto[j].Model, counter);
        counter = 0;
    }
    printf("\n");
    system("pause");
    return 0;
}

最佳答案

一种方法是创建一个与当前数组长度相同的“模型计数”数组,并用它来“记住”您已经计数了哪些汽车。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Auto{
  char Model  [16];
  char Number [8];
  char Color  [10];
  char Name   [16];
};

int main() {

  int i, j, counter=0;
  char EnteredModel[16] = { "Audi" };
  struct Auto MyAuto[5] = { { "Audi",   "x007x", "blue",  "Alexander" },
                            { "Ford",   "x777x", "red",   "Andrey" },
                            { "Porsche","a000b", "white", "Oleg"},
                            { "Audi",   "x007x", "blue",  "Sergey"},
                            { "Audi",   "f666f", "black", "Daniel"} };
  int modelCounted[5] = {0};

  //printf("Enter the number of the interested model: ");
  //scanf("%s", &EnteredModel);

  for (i = 0; i < 5; i++) {
    if (i == 0) {
      printf("#####################################################\n");
      printf("#Model           #Number  #Color     #Name          #\n");
      printf("#####################################################\n");
    }
    if (strcmp(MyAuto[i].Model, EnteredModel) == 0) {
                            // NOTICE:        ^^^^
      printf("%-17s%-9s%-11s%-17s\n", MyAuto[i].Model, MyAuto[i].Number, MyAuto[i].Color, MyAuto[i].Name);
    }
  }

  printf("\n");
  for (j = 0; j < 5; j++) {
    if (!modelCounted[j])  // Only enter inner-loop if car hasn't been counted already
    {
      for (i = 0; i < 5; i++) {
        if (strcmp(MyAuto[i].Model, MyAuto[j].Model) == 0) {
          counter++;
          modelCounted[i] = 1;  // Mark car as counted
        }
      }
      printf("%s = %d\n", MyAuto[j].Model, counter);
      counter = 0;
    }
  }
  printf("\n");

    return 0;
}

输出:

#####################################################
#Model           #Number  #Color     #Name          #
#####################################################
Audi             x007x    blue       Alexander
Audi             x007x    blue       Sergey
Audi             f666f    black      Daniel

Audi = 3
Ford = 1
Porsche = 1

顺便说一句:请注意第一个 strcmp

的更改

关于计算C中结构体数组中的唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40405289/

相关文章:

c++ - 如何将结构作为参数传递给其他函数进行输入,然后在原始函数处输出

c++ - 将结构从 C 转换为 C++ 类

c - 这个结构指针会发生什么?

c - 读/写/修改 C 中的结构

java - 通过 JNI 的数据未正确传递

c - Int 在 struct 中不起作用

C 即使套接字为空,recv() 仍继续读取

c - 在下面的程序中,我期望无限循环作为输出。但输出为0,请帮我解释一下它背后的概念

c++ - 将字母转换为整数,然后求字符串之和

c - 将数组中的元素添加到结构体数组