我有一个这个结构的数组:
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/