这道题是要求我们模拟一个注册系统,判断每个要注册的名字是否已被注册过,若未被注册则进行注册,否则注册新名字。
这道题的算法标签里显示的是要使用哈希,然而哈希函数和这里我们使用的映射本质上都是对复杂内容进行表示,所以哈希就不如映射方便了。
使用映射,首先我们需要使用STL中的<map>库和<string>库,并定义一个从string类型到int类型的map映射a。a中每个字符串对应的值会被自动初始化为0。
接下来我们要定义一个string类型的变量s,然后不断进行读入。如果s指向的int值为0,说明该用户名未被注册过,输出“OK”,并将a[s]赋值为1。如果已经注册过,则需要在输出s的后面输出a[s]的值(该用户名是第几次被使用)。
下面是完整代码:
1 #include<iostream>
2 #include<map>
3 using namespace std;
4 int n,i;
5 map <string,int> a;
6 string s;
7 int main(){
8 cin>>n;
9 for(i=1;i<=n;i++){
10 cin>>s;
11 if(a[s]==0){//未被注册过
12 cout<<"OK"<<endl;
13 a[s]=1;
14 }else{//已被注册过
15 cout<<s<<a[s]<<endl;
16 a[s]++;
17 }
18 }
19 return 0;
20 }