隐藏个人信息
给你一条个人信息字符串 S,它可能是一个 邮箱地址 ,也可能是一串 电话号码
我们将隐藏它的隐私信息,通过如下规则:
class Solution {
public:
//邮箱处理函数
string MailToString(const string& str) {
//1、首先获取第一组到第一个和最后一个字符
size_t pos = str.find('@');
size_t pos1 = str.find('.');
if(pos == str.npos || pos1 == str.npos || pos == 0) {
return string();
}
string tmp;
//填充第一组
if(str[0] >= 'A' && str[0] <= 'Z') { tmp.push_back(str[0] + 32); }
else { tmp.push_back(str[0]); }
tmp += "*****";
if(str[pos-1] >= 'A' && str[pos-1] <= 'Z') { tmp.push_back(str[pos-1] + 32); }
else { tmp.push_back(str[pos-1]); }
tmp.push_back('@');
//填充后续信息
for(int i = pos + 1; i < str.size(); i++) {
if(str[i] >= 'A' && str[i] <= 'Z') { tmp.push_back(str[i] + 32); }
else { tmp.push_back(str[i]); }
}
return tmp;
}
string PhoneToString(const string& str) {
//1、统计数字长度
int count = 0;
for(const auto& sit : str) {
if(sit >= '0' && sit <= '9') { count++; }
}
if(count < 4) {
return string();
}
//2、读取后4位数字
string tmp;
int end = str.size() - 1;
while(tmp.size() < 4) {
if(str[end] >= '0' && str[end] <= '9') {
tmp.push_back(str[end]);
}
end--;
}
reverse(tmp.begin(), tmp.end());
//3、对应分析返回
if(count == 10) {
string tmp1("***-***-");
tmp1 += tmp;
return tmp1;
}
if(count > 10) {
string tmp1("+");
for(int i = 0; i < count -10; i++) {
tmp1.push_back('*');
}
tmp1 += "-***-***-";
tmp1 += tmp;
return tmp1;
}
string tmp1("+-***-***-");
tmp1 += tmp;
return tmp1;
}
string maskPII(string S) {
if(S.size() == 0) {
return string();
}
//1、通过后缀筛选邮箱和电话号码
size_t pos = S.find(".");
string str_ret;
if(pos != S.npos) {
//邮箱
str_ret = MailToString(S);
}
else {
//电话号码
str_ret = PhoneToString(S);
}
return str_ret;
}
};