返回目录
题意
输入n个人的姓名和密码,统计密码中出现了1(数字1)|0(数字0)|l(小写L)|O(大O)的个数,并将密码分别修改为@|%|L(大写L)|o(小写O)输出
注意点
- 本题专门写了一个函数setflag()判断是否为要修改的人,判断时同时做标记
- 注意setflag()用了引用类型&,否则无法修改密码
#include <bits/stdc++.h>
using namespace std;
struct per{
char name[15],pwd[15];
bool flag;
}man[1010];
bool setflag(per& a){
int len=strlen(a.pwd);
bool tmp=true;
for(int i=0;i<len;i++){
if(a.pwd[i]=='1'){
a.pwd[i]='@';tmp=false;
}
if(a.pwd[i]=='0'){
a.pwd[i]='%';tmp=false;
}
if(a.pwd[i]=='l'){
a.pwd[i]='L';tmp=false;
}
if(a.pwd[i]=='O'){
a.pwd[i]='o';tmp=false;
}
}
a.flag=tmp;
return tmp;
}
int main(){
int n,sum=0;
cin>>n;
for(int i=0;i<n;i++){
scanf("%s %s",man[i].name,man[i].pwd);
if(!setflag(man[i]))sum++;
}
if(sum==0&&n==1)printf("There is 1 account and no account is modified\n");
if(sum==0&&n!=1)printf("There are %d accounts and no account is modified\n",n);
if(sum!=0)printf("%d\n",sum);
for(int i=0;i<n;i++){
if(man[i].flag)continue;
printf("%s %s\n",man[i].name,man[i].pwd);
}
return 0;
}