c - 在用户输入的多个名称中查找第一个重复的名称
问题描述
社工组织了一顿早餐。排队领取食物包的人很多。快速找出第一个重新出现在排队领取食品包的人。
给定
亚当、宾尼、索海尔、克里希纳、玛雅克、索海尔、亚当
输出应该是:
索海尔
我无法用c语言解决这个问题。
请问有人可以解释该怎么做吗?
这是我的代码:
#include<stdio.h>
int main()
{
int n,i,j;
char str[20][20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&str[i]);
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(str[i]==str[j]){
printf("%s\n",str[i]);
return 0;
}
}
}
return 0;
}
我没有得到任何输出。
解决方案
它可以给你一些方向:
#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);
}
}
}
推荐阅读
- r - 如何在R中的矩阵乘法中获得单个值的最大值
- javascript - 如何使用 JavaScript 或 CSS 动态更改 SVG 过滤器?
- php - 不能使用 paramiko 来回显 python 的输出
- java - 如何启用 logback 以每 x 分钟/5 分钟/30 分钟轮换一次日志文件?
- rest - TFS 2017 发布管道
- c# - 传递单个对象与传递多个参数 WebAPI2
- mysql - 如何编写具有多个字段的mysql查询(在where子句中有组合)
- arrays - 将 Array{Int, 1} 转换为 Array{Int, 2}
- error-handling - 仅返回 GraphQL 中的子解析器错误
- delphi - 当应用程序通过任务管理器终止时,ole 容器关闭功能会触发 EOleSysError