arrays - 如何比较结构数组的两个成员?
问题描述
我对比较结构数组的两个成员有疑问。我有我的函数,它接收两个不同结构的索引并比较它们。最后,在检查完所有字段后,该函数必须返回一个表示相似度的整数。
我做了这个代码:
int compareRecord(RecordSoggetto soggetto1, RecordSoggetto soggetto2) {
int similiarity = 0;
if (strcmp(soggetto1.name, soggetto2.name) == 0)
similiarity += 7;
if (strcmp(soggetto1.surname, soggetto2.surname) == 0)
return similiarity += 7;
}
我以这种方式调用该函数:
printf("\nInsert first index");
scanf("%d", &first);
printf("\nInsert second index");
scanf("%d", &second);
similiarity = confrontaRecord(???);
printf("\nSimiliarity= %d%%", similiarity);
但是现在不知道在调用函数的时候要输入什么参数,也不确定函数本身的参数是否正确这是结构:
typedef struct {
char name[DIM_NOME];
char surname[DIM_COGNOME];
} RecordSoggetto;
RecordSoggetto soggetto[DIM_RECORD];
你能帮助我吗?
解决方案
您的比较函数具有未定义的行为。它不会在每个路径中都返回一个值。像这样改变它:
int compareRecord(RecordSoggetto soggetto1, RecordSoggetto soggetto2){
int similiarity=0;
if (strcmp(soggetto1.name, soggetto2.name) == 0)
similiarity+=7;
if (strcmp(soggetto1.surname, soggetto2.surname) == 0)
similiarity+=7;
return similiarity;
}
关于通话:
similiarity = confrontaRecord(soggetto[first], soggetto[second]);
如果您不想复制完整的结构,您也可以只传递它们的地址,这会带来更好的性能(复制的内存更少)。请注意,在这种情况下,我添加const
了compareRecord
无法修改RecordSoggetto
s. 这有助于防止错误。
int compareRecord(const RecordSoggetto* soggetto1, const RecordSoggetto* soggetto2){
int similiarity=0;
if (strcmp(soggetto1->name, soggetto2->name) == 0)
similiarity+=7;
if (strcmp(soggetto1->surname, soggetto2->surname) == 0)
similiarity+=7;
return similiarity;
}
similiarity = confrontaRecord(&soggetto[first], &soggetto[second]);
推荐阅读
- c++ - C++:实例化库中的许多模板
- java - 如何为弹出窗口提供弯曲边缘并为弹出窗口提供明显的阴影
- python - 在子目录中工作时如何正确导入模块?
- mysql - MySQL REGEX 将 json 转换为逗号分隔的键以在 WHERE IN 中使用
- python - How to get values in TensorArray which contain vary shape tensors
- java - getURLForResource() 的包含文件是什么?
- java - AbstractMethodError:org.apache.bval.jsr303.ConfigurationImpl 缺少方法 getDefaultParameterNameProvider() 的定义
- c# - 从另一个项目运行 .net core 项目
- vector - 如何反向填充向量?
- java - BufferedReader 中的方法跳过和重置有哪些实际用例?