Masking Personal Information

We are given a personal information string S, which may represent either an email address or a phone number.

We would like to mask this personal information according to the following rules:

1. Email address:

We define a name to be a string of length ≥ 2 consisting of only lowercase letters a-z or uppercase letters A-Z.

An email address starts with a name, followed by the symbol '@', followed by a name, followed by the dot '.' and followed by a name.

All email addresses are guaranteed to be valid and in the format of "name1@name2.name3".

To mask an email, all names must be converted to lowercase and all letters between the first and last letter of the first name must be replaced by 5 asterisks '*'.

2. Phone number:

A phone number is a string consisting of only the digits 0-9 or the characters from the set {'+', '-', '(', ')', ' '}. You may assume a phone number contains 10 to 13 digits.

The last 10 digits make up the local number, while the digits before those make up the country code. Note that the country code is optional. We want to expose only the last 4 digits and mask all other digits.

The local number should be formatted and masked as "***-***-1111", where 1 represents the exposed digits.

To mask a phone number with country code like "+111 111 111 1111", we write it in the form "+***-***-***-1111".  The '+' sign and the first '-' sign before the local number should only exist if there is a country code.  For example, a 12 digit phone number mask should start with "+**-".

Note that extraneous characters like "(", ")", " ", as well as extra dashes or plus signs not part of the above formatting scheme should be removed.

Return the correct "mask" of the information provided.

Example 1:

Input: "LeetCode@LeetCode.com"
Output: "l*****e@leetcode.com"
Explanation: All names are converted to lowercase, and the letters between the
  first and last letter of the first name is replaced by 5 asterisks.
  Therefore, "leetcode" -> "l*****e".

Example 2:

Input: "AB@qq.com"
Output: "a*****b@qq.com"
Explanation: There must be 5 asterisks between the first and last letter
  of the first name "ab". Therefore, "ab" -> "a*****b".

Example 3:

Input: "1(234)567-890"
Output: "***-***-7890"
Explanation: 10 digits in the phone number, which means all digits make up the local number.

Example 4:

Input: "86-(10)12345678"
Output: "+**-***-***-5678"
Explanation: 12 digits, 2 digits for country code and 10 digits for local number.

Notes:

  1. Emails have length at least 8.
  2. Phone numbers have length at least 10.
  3. S.length <= 40.
 1     string maskPII(string S) {
2 string res;
3 string test;
4 if(('a'<=S[0]&&S[0]<='z')||('A'<=S[0]&&S[0]<='Z')){ //别连写了
5 if('A'<=S[0]&&S[0]<='Z'){
6 res += S[0]+32; //string+char的用法
7 }else{
8 res += S[0];
9 }
10 res += "*****";
11 int i = 0;
12 for(i ; i < S.length();i++){
13 if(S[i] == '@'){
14 //test += i + '0';
15 break;
16 }
17 }
18 //test += S[i-1];
19 if('A'<=S[i-1]&&S[i-1]<='Z'){
20 res += S[i-1]+32;
21 }else{
22 res += S[i-1];
23 }
24 for(i;i<S.length();i++){
25 if('A'<=S[i]&&S[i]<='Z'){
26 res += S[i]+32;
27 }else{
28 res += S[i];
29 }
30 }
31 }else{
32 vector<int> data;
33 for(int i = 0; i < S.length();i++){
34 if('0'<=S[i]&&S[i]<= '9'){ //isdigit()函数可用
35 data.push_back(S[i] - '0');
36 }
37 }
38 //test += '0'+data.size();
39 if(data.size() > 10){
40 res += '+';
41 for(int j = 0; j < data.size() - 10;j++){
42 res += '*';
43 }
44 res += '-';
45 }
46 res += "***-***-";
47 for(int i = data.size() - 4; i < data.size(); i++){
48 res += data[i] + '0';
49 }
50 }
51 return res;
52 }

注意点:

  • isdigit()
  • string + char可直接加

最新文章

  1. C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
  2. 类的继承和多态性-编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,
  3. EffectiveC#7--选择恒定的原子值类型数据
  4. Python 3语法小记(五)字符串
  5. Android之布局大全
  6. ubuntu16.04的下载安装
  7. FreeSql v0.5.x 功能介绍
  8. OpenCV常用头文件介绍
  9. Cookie Manager
  10. Windows 增加远程连接数
  11. 4月22 mysql常用函数
  12. javascript学习笔记(六):对象、内置对象
  13. 超全面!UI设计师如何适配2018新款iPhone
  14. Unity Shader 自定义纹理坐标变量写法
  15. 第6章—渲染web视图—使用Apache Tiles视图定义布局
  16. X-NUCA联赛WEB赛前指导write-up
  17. kubernetes基础概念
  18. xunsearch开发流程(三)
  19. PHP常用文件操作
  20. 12、SpringBoot-CRUD增加数据

热门文章

  1. JD-GUI反编译jar包为Java源代码
  2. matlab中bitshift 将位移动指定位数
  3. iPhone手机越狱-逆向砸壳-代码注入
  4. 对ACE和ATL积分
  5. Oracle 和 MySQL 在显示数据库名和表名的区别
  6. git 本地回滚到上一个版本
  7. java流程控制学习
  8. 【纯水题】POJ 1852 Ants
  9. 【xenomai内核解析】系列文章大纲
  10. 《Connecting the Dots: A Knowledgeable Path Generator for Commonsense Question Answering》一文的理解和总结