第一部分:问题描述
题目描述
小明同学有一个通讯录,通讯录中有 n 条记录。对于每一条记录,分别有对方的姓名和电话号码。假设通讯录中所有的姓名都不重复,请你帮小明同学写一个程序,以姓名为输入,查询该姓名对应的电话号码。
输入
第一行为两个整数 n 和 m,其中 n 表示通讯录中记录的数量,m 表示查询的数量。
接下来的 n 行,每行2个字符串 name 和 number,其中 name 表示姓名,number 表示 name 对应的电话号码。字符串 name 和字符串 number 均不含空格。
之后出现的 m 行,每行1个字符串 query,表示需要查询的姓名。
输出
对于每一次需要查询的姓名,输出对应的电话号码。如果通讯录中没有改姓名,则输出Not Found。
输入样例:
2 3
alice 1234567
bob 7654321
alice
bob
catherine
输出样例:
1234567
7654321
Not Found
条件限制(取值范围):
1≤n≤500000。
1≤m≤10000。
query 的每一位是26个小写英文字母(即a到z)之一,且字符串 name 和字符串 query 的长度不超过20。字符串 number 的每一位是10个阿拉伯数字(即0到9)之一,且字符串 number 的长度不超过 20。
第二部分:代码实现
#include <stdio.h>
#include <stdio.h>
struct student
{
char name[20];
char phone[20];
};
int main() {
//定义一个结构体数组存储所有的通讯录记录
int n;//n代表通讯录中记录的数量
scanf("%d",&n);
int m;//m代表需要查找的姓名数量
scanf("%d",&m);
struct student arr[n];
for(int i=0;i<n;i++)
{
struct student s1;
scanf("%s",&s1.name);
scanf("%s",&s1.phone);
arr[i]=s1;
}
/*
//循环输出所有内容
for(int i=0;i<n;i++)
{
printf("%s",arr[i].name);
printf("%s",arr[i].phone);
printf("\n");
}
*/
//定义第二个结构体数组,存储要查找的所有姓名。
struct student arr2[m];
for(int i=0;i<m;i++)
{
struct student s1;
scanf("%s",&s1.name);
//scanf("%s",&s1.phone);
arr2[i]=s1;
}
//开始将数据填充到arr2中---查询操作
for(int i=0;i<m;i++)
{
int amount=0;
for(int j=0;j<n;j++)
{
//循环比对两个数组
int result=strcmp(arr2[i],arr[j]);
if(result!=0)//如果name不一样,amount++
{
amount++;
}
else//比对成功,查找到了对应的手机号
{
//arr2[i].phone=arr[j].phone;
strcpy(arr2[i].phone,arr[j].phone);
}
}
if(amount==n)
{
strcpy(arr2[i].phone,"Not Found");
}
}
//输出结果
for(int i=0;i<m;i++)
{
printf("%s",arr2[i].phone);
printf("\n");
}
}
第三部分:效果展示
第四部分:思路解析
(1)定义结构体,包含姓名和手机号码
struct student
{
char name[20];
char phone[20];
};
(2)定义arr数组,存储通讯录的所有数据
struct student arr[n];
for(int i=0;i<n;i++)
{
struct student s1;
scanf("%s",&s1.name);
scanf("%s",&s1.phone);
arr[i]=s1;
}
(3)定义arr2数组,存储要查询的姓名和查询结果
//定义第二个结构体数组,存储要查找的所有姓名。
struct student arr2[m];
for(int i=0;i<m;i++)
{
struct student s1;
scanf("%s",&s1.name);
//scanf("%s",&s1.phone);
arr2[i]=s1;
}
//开始将数据填充到arr2中---查询操作
for(int i=0;i<m;i++)
{
int amount=0;
for(int j=0;j<n;j++)
{
//循环比对两个数组
int result=strcmp(arr2[i],arr[j]);
if(result!=0)//如果name不一样,amount++
{
amount++;
}
else//比对成功,查找到了对应的手机号
{
//arr2[i].phone=arr[j].phone;
strcpy(arr2[i].phone,arr[j].phone);
}
}
if(amount==n)
{
strcpy(arr2[i].phone,"Not Found");
}
}
希望能够帮助到大家!