#SX0003. 号码清洗
号码清洗
题目描述
小明的通讯录里存了若干联系人,但格式混乱(姓名可能没有首字母大写,手机号可能包含空格、-、(、)等特殊字符)。请你帮他标准化手机号格式,并整理通讯录,具体要求如下:
- 手机号清洗:对每个联系人的手机号,去除所有非数字字符(仅保留0-9);
- 手机号校验:清洗后的手机号需满足两个条件:
- 长度恰好为11位;
- 首位数字为1(符合国内手机号规则); 若不满足,标记为"无效手机号",不加入最终通讯录;
- 格式标准化:将有效手机号转换为1xx-xxxx-xxxx格式;
- 通讯录排序:按联系人姓名的升序排序(不区分大小写,如"Alice"在"Bob"前,"charlie"在"David"前);
- 输出结果:先输出有效联系人的数量,再按排序后的顺序输出每个联系人的"姓名 标准化手机号"(无效手机号的联系人不输出)。
输入格式
第一行输入整数n,表示联系人数量;接下来n行,每行一个联系人信息,格式为"姓名:手机号"(姓名仅含大小写字母,无空格;手机号含数字和特殊字符)。
输出格式
先输出有效联系人的数量,再按排序后的顺序输出每个联系人的"姓名 标准化手机号"(无效手机号的联系人不输出)。
样例1
4
Alice:138-1234-5678
bob:139-4567-8901
Charlie:1234567890
David:140-5678-9012
3
Alice 138-1234-5678
bob 139-4567-8901
David 140-5678-9012
样例解释1
- Alice的手机号清洗后为"13812345678"(11位,首1,有效)→标准化为"138-1234-5678";
- bob的手机号清洗后为"13945678901"(11位,首1,有效)→标准化为"139-4567-8901";
- Charlie的手机号清洗后为"1234567890"(仅10位,无效)→不输出;
- David的手机号清洗后为"14056789012"(11位,首1,有效)→标准化为"140-5678-9012"; 按姓名首字母排序:Alice(A)→bob(B)→David(D),共3个有效联系人。
数据规模与约定
对于30%的数据,保证字符串中仅出现数字字符和以下四种特殊字符:':'、'('、')'和'-'。
对于另外20%的数据,保证输入的联系人姓名是有序的。
对于另外20%的数据,保证输入的联系人姓名首字母一定是大写的。
对于100%的数据,1<=n<=1000,保证联系人的姓名除首字母可能是大写的之外,其他字母都是小写,联系人不会重名。