运用c语言,可以从文件中整行读取人物关系并存在一个数组中,写一个GetRelationship函数,可以通过输入两个人物,用该函数返回两个人物的关系
时间: 2024-03-27 12:36:32 浏览: 13
好的,我会尽力回答你的问题。首先,你需要定义一种数据结构来存储人物关系。可以使用结构体来表示每个人物及其与其他人物的关系,如下所示:
```c
typedef struct {
char name[50]; // 人物名字
char relation[50][50]; // 与其他人物的关系
int relation_num; // 关系数量
} Person;
```
然后,你需要编写一个函数来从文件中读取人物关系并存储在一个Person类型的数组中,函数如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_PERSON_NUM 100 // 人物数量上限
Person persons[MAX_PERSON_NUM]; // 人物数组
int person_num = 0; // 人物数量
void ReadRelationshipFromFile(const char* filename) {
FILE* fp = fopen(filename, "r");
char line[1000];
while (fgets(line, 1000, fp)) {
char* name = strtok(line, ",");
int index = -1;
for (int i = 0; i < person_num; i++) {
if (strcmp(persons[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) {
strcpy(persons[person_num].name, name);
index = person_num;
person_num++;
}
char* relation = strtok(NULL, ",");
while (relation != NULL) {
relation[strcspn(relation, "\r\n")] = '\0'; // 去除换行符
strcpy(persons[index].relation[persons[index].relation_num], relation);
persons[index].relation_num++;
relation = strtok(NULL, ",");
}
}
fclose(fp);
}
```
上述函数从给定的文件中读取每一行,将人物名字和与其有关系的人物名字分别存储在一个Person类型的结构体中。如果人物名字在数组中已经出现过,则只需要更新与之有关系的人物名字即可。如果人物名字没有出现过,则将其存储在数组的最后,并更新人物数量。
接下来,你需要编写一个函数来返回两个人物之间的关系。可以遍历每个人物的关系数组,查找是否有与两个输入人物名字都相同的关系,如果有,则返回这个关系;如果没有,则返回“未知关系”。函数如下:
```c
const char* GetRelationship(const char* person1, const char* person2) {
for (int i = 0; i < person_num; i++) {
if (strcmp(persons[i].name, person1) == 0) {
for (int j = 0; j < persons[i].relation_num; j++) {
if (strcmp(persons[i].relation[j], person2) == 0) {
return "亲戚关系";
}
}
} else if (strcmp(persons[i].name, person2) == 0) {
for (int j = 0; j < persons[i].relation_num; j++) {
if (strcmp(persons[i].relation[j], person1) == 0) {
return "亲戚关系";
}
}
}
}
return "未知关系";
}
```
上述函数首先遍历每个人物,查找是否有与其中一个输入人物名字相同的人物。如果找到了,则再遍历这个人物的关系数组,查找是否有与另一个输入人物名字相同的关系。如果找到了,则返回“亲戚关系”;如果没有找到,则返回“未知关系”。
最后,你需要在主函数中调用上述函数,输入两个人物名字,并输出它们之间的关系,如下所示:
```c
int main() {
ReadRelationshipFromFile("relationships.txt");
char person1[50], person2[50];
printf("请输入两个人物名字:");
scanf("%s %s", person1, person2);
const char* relationship = GetRelationship(person1, person2);
printf("%s 和 %s 之间的关系是:%s\n", person1, person2, relationship);
return 0;
}
```
上述主函数首先调用ReadRelationshipFromFile函数从文件中读取人物关系,并存储在persons数组中。然后,它输入两个人物名字,并调用GetRelationship函数来获取它们之间的关系。最后,它输出这个关系。