C 在用户输入的多个名称中查找第一个重复名称
有一个由社会工作者组织的早餐会。有许多人排队领取食品袋。迅速找出排队领取食品包的第一个人 给定 亚当,宾尼,索海尔,克里希纳,玛亚克,索海尔,亚当 输出应为: 苏海尔 我无法用c语言解决这个问题。 有人能解释一下怎么办吗 这是我的代码: 包括 int main { int n,i,j; char-str[20][20]; 扫描%d,&n;C 在用户输入的多个名称中查找第一个重复名称,c,C,有一个由社会工作者组织的早餐会。有许多人排队领取食品袋。迅速找出排队领取食品包的第一个人 给定 亚当,宾尼,索海尔,克里希纳,玛亚克,索海尔,亚当 输出应为: 苏海尔 我无法用c语言解决这个问题。 有人能解释一下怎么办吗 这是我的代码: 包括 int main { int n,i,j; char-str[20][20]; 扫描%d,&n; 因为i=0;i它可以给你一些指示: #include <stdio.h> #include <stdlib.h> #include &
因为i=0;i它可以给你一些指示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct PersonInfo
{
char *name;
int number;
} person_info;
void check(person_info arr[], size_t size);
int main()
{
char *arr_debug[20] = {"Adam", "Binny", "Sohail", "Krishna", "Mayank", "Sohail", "Adam"};
int i = 0;
person_info arr[7];
size_t size = sizeof(arr)/sizeof(arr[0]);
person_info temp;
for (i = 0; i < size; i++) {
// scanf("%s", temp.name);
temp.name = arr_debug[i];
temp.number = i + 1; // start counting from 1
arr[i] = temp;
}
check(arr, size);
return 0;
}
void check(person_info arr[], size_t size) {
char *temp_name;
int nums[size]; // filled with 0s
int num = 0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (strcmp(arr[i].name, arr[j].name) == 0 && arr[i].number < arr[j].number) {
nums[num] = arr[j].number;
num++;
//store the number of the person
}
}
}
//find the earliest occurence
int earliest = nums[0];
for (int i = 1; i < size; i++) {
if (earliest > nums[i] && nums[i] != 0) {
earliest = nums[i];
}
}
//find the name associated to the number
for (int i = 0; i < size; i++) {
if (arr[i].number == earliest) {
temp_name = arr[i].name;
printf("%s \n", temp_name);
}
}
}
请尝试解决这个问题,并告诉我们您遇到了什么困难。1.您知道如何制作像Hello world这样的简单C程序/2.您知道如何从用户处获取字符串输入吗?/3.您知道如何将该字符串存储在字符串数组中吗?/4.您知道如何使用或制作其他数据结构,如哈希表或二叉树-是这样吗在这个赋值的范围内,或者你能用数组做一些简单的事情吗?ifstr[i]==str[j]永远不会为真,因为你测试两个不同的指针是否相等,你想要if!strcmpstr[i],str[j],所以你永远不会打印f