跳转至

动态通讯录

Deadline

2026年4月10日23:59

题目背景

请你实现一个简单的动态通讯录。通讯录中的每条记录包含姓名和电话号码,姓名不重复。系统需要支持新增、修改、删除、查找和整体输出。

题目描述

给定若干条操作,请按照要求维护通讯录:

  • add name phonename 不存在,则加入一条新记录;若已存在,则忽略该操作。
  • update name phonename 存在,则把电话号码修改为 phone;若不存在,则忽略该操作。
  • delete namename 存在,则删除该记录;若不存在,则忽略该操作。
  • find name 输出该联系人的电话号码;若不存在,则输出 NOT FOUND
  • print 按当前存储顺序输出所有联系人,格式为 name:phone,相邻记录之间用一个空格分隔;若通讯录为空,则输出 EMPTY

输入格式

第一行输入一个整数 q,表示操作总数。

接下来 q 行,每行是一条操作,格式如题目描述所示。

输出格式

对于每一条 find 操作和每一条 print 操作,各输出一行结果。

数据范围

  • 1 <= q <= 200
  • name 长度不超过 31,且只包含英文字母
  • phone 长度不超过 31,且只包含数字字符

时间限制

1 秒

内存限制

128 MB

样例

输入

8
add alice 1350000
add bob 1391111
find alice
update bob 1888888
find bob
delete alice
find alice
print

输出

1350000
1888888
NOT FOUND
bob:1888888

提示

  • 可以使用结构体 Contact 表示单个联系人。
  • 可以使用动态数组存储联系人列表,并在容量不足时扩容。
  • 删除联系人后,需要保持其余联系人顺序不变。
  • findupdate 前,可以先查找姓名是否存在。

实现要求

  • 必须使用结构体保存联系人信息。
  • 必须使用指针管理字符串内存。
  • 必须使用二级指针或等价方式完成通讯录扩容,例如维护 Contact **items
  • 建议至少拆分为联系人模块、通讯录模块、主程序三部分。
  • 工程需要能通过 MakefileCMakeLists.txt 构建。
  • 平台无法进行CMake编译,所以需要同学将所有文件放在同一目录下。