#SX0003. 号码清洗

号码清洗

题目描述

小明的通讯录里存了若干联系人,但格式混乱(姓名可能没有首字母大写,手机号可能包含空格、-、(、)等特殊字符)。请你帮他标准化手机号格式,并整理通讯录,具体要求如下:

  1. 手机号清洗:对每个联系人的手机号,去除所有非数字字符(仅保留0-9);
  2. 手机号校验:清洗后的手机号需满足两个条件:
    • 长度恰好为11位;
    • 首位数字为1(符合国内手机号规则); 若不满足,标记为"无效手机号",不加入最终通讯录;
  3. 格式标准化:将有效手机号转换为1xx-xxxx-xxxx格式;
  4. 通讯录排序:按联系人姓名的升序排序(不区分大小写,如"Alice"在"Bob"前,"charlie"在"David"前);
  5. 输出结果:先输出有效联系人的数量,再按排序后的顺序输出每个联系人的"姓名 标准化手机号"(无效手机号的联系人不输出)。

输入格式

第一行输入整数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,保证联系人的姓名除首字母可能是大写的之外,其他字母都是小写,联系人不会重名。