c - 结构数组操作

标签 c arrays string struct

我有一个这个结构的数组:

typedef struct
{
    char dni[9];
    char nombre [100], apellido [100];
    double monto_adeudado;
} t_datos;

我需要将整个数组复制到另一个数组中,但有此限制:如果两个或多个值具有相同的 dni 值,则只将一个对象输出到结果数组中,并且 的值monto_adeudado 将是具有相同 dni 值的所有元素的总和。我已经写了一些代码,但它不能正常工作,只有当两个值具有相同的 dni 值时它才能正常工作。我将“0”设置为我已经添加的元素的 dni 值。

int main()
{
    int i = 0, x = 0, y = 0, ret = 1;
    t_datos arr[3];
    t_datos aux[3];
    char *b = "0";

    for(i = 0; i < 3; i++)
    {
         for(x = i + 1; x < 3; x++)
         {
             ret = strcmp(arr[i].dni, arr[x].dni);

             if(ret == 0)
             {
                 aux[y] = arr[i];
                 aux[y].monto_adeudado += arr[x].monto_adeudado;
                 *arr[x].dni = "0"; 
                 y++;
             }
         }
    }

    for(i = 0; i < 3; i++)
    {
        ret = strcmp(b, arr[i].dni);

        if (ret != 0)
        {
            aux[y] = arr[i];
        }
    }
}

最佳答案

您的算法看起来不正确。如果您对线性搜索没问题(这将需要二次运行时间),您可以使用如下方法:

int NUM = 3; // size of input array
int cur = 0;
for(int i=0; i<NUM; i++) {
    bool found = false;
    for(int j=0; j<cur; j++) {
        if(0 == strcmp(arr[i].dni, aux[j].dni)) {
            // found an existing entry, add to it
            aux[j].monto_adeudado += arr[i].monto_adeudado;
            found = true;
            break;
        }
    }
    if(!found) {
        // didn't find an existing entry
        aux[cur++] = arr[i];
    }
}

无需在此处使用现有名称 - 这只是逐个元素地构建输出数组。

关于c - 结构数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31508448/

相关文章:

c - 字符串数组,并打印这些元素

c++ - 字符串中单词的逆序

c - 在高度平衡树中使用反向指针是什么意思?

Python:打印字符 - 嵌套循环或连接字符串?

java - 从文件读取数据并存储它们的最佳方法

c++ - 如何为非常大的筛子保留内存?

c# - 如何从字符串中解析算术运算符?

c - 返回值的枚举或 typedef 枚举

c - 在 C 中使用宏定义数据结构

c - 使用 C 宏的段错误