描述
zzx和city 在玩游戏的时候,了解到游戏的数据都是存储在数据库中,于是两人上网查到了一些资料,现在他们了解到了数据的操作语言有以下4种(其实有更多的语句,但zzx和city现在只找到4个):
1.创建表 create table 表名 (为了简化问题 创建的表里只有4个属性,ID,账号(Username),密码(Password),和昵称(Nickname)(ID是自动增加的,不需要自己插入,账号具有唯一性)
2.插入数据:insert into 表名 (属性,属性.....) values(插入属性值,插入属性值......)(插入在表中最后一行)
3.删除数据:delete from 表名 where 条件(只有 ID=?[删除ID等于多少的行] 和 Username=? [删除Username等于多少的行])
4.查询数据:select * from 表名 (查询整张表)
现在zzx和city希望你写一个程序来运行一下这几条命令。
输入
只有一组数据
第一行一个N (2<N<10000)表示 有N条数据库命令
第二行一定是create 命令,且只会在在第二行出现。 表名不超过10个字符
后N-1行有插入、删除、查询命令(ID是整数,从1开始,Username,Password,Nickname均不超过30字符[仅包括字母和数字的字符])(查询命令不超过30次)
输出
对于第一条命令输出 create OK(因为创建是不可能失败的);
对于第二条命令输出 insert OK或者insert ERROR(插入错误是指表中有了该Username,因为他是具有唯一性的)
对于第三条命令输出 delete OK 或者delete ERROR(删除错误是指没有这个ID,或者Username)
对于第四条命令输出 表中全部数据,按照ID的大小输出,ID小的先输出,每个数据占一行,按照ID,Username,Password,Nickname的顺序输出(由于数据库中不区分大小写,这里全部按照小写输出),每个数据之间有5个空格(没有数据输出Empty set)
样例输入
10
create table game
select * from game
insert into game (Username,Password,Nickname) values('zzx','123456','zzx')
insert into game (Username,Password,Nickname) values('city','123456','city')
insert into game (Username,Password,Nickname) values('zzx','123456','zzx')
delete from game where Username = 'ZZX'
delete from game where Username = 'crq'
delete from game where ID = 2
insert into game (Nickname,Password,Username) VALUES('zzx','123456','zzx')
select * from game
样例输出
create OK
Empty set
insert OK
insert OK
insert ERROR
delete OK
delete ERROR
delete OK
insert OK
3 zzx 123456 zzx
代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <bits/stdc++.h> using namespace std; struct edge { string username,password,nickname; }; map<string,int> m; map<int,edge> m1; char s[1005]; int main() { int t,flagid=0,num=0; scanf("%d",&t); getchar(); for(int i=1;i<=t;i++) { if(i==1) { gets(s); cout<<"create OK\n"; } else { gets(s); int len=strlen(s); for(int j=0;j<len;j++) { if(s[j]>='A'&&s[j]<='Z')s[j]+=32; } if(s[0]=='i') { int r=0,z=0; char ch[3]; string Username,Password,Nickname; while(s[++r]!='('); for(;s[r]!=')';r++) { if(s[r]=='u')ch[z++]='u'; else if(s[r]=='p')ch[z++]='p'; else if(s[r]=='i')ch[z++]='n'; } while(s[++r]!='('); z=0; for(;s[r]!=')';r++) { string str; if(s[r]==(' '+7)) { while(s[++r]!=(' '+7)) { str=str+s[r]; } if(ch[z]=='u')Username=str; else if(ch[z]=='p')Password=str; else if(ch[z]=='n')Nickname=str; z++; } } if(m[Username]==0) { m[Username]=++flagid; m1[flagid].nickname=Nickname; m1[flagid].password=Password; m1[flagid].username=Username; cout<<"insert OK\n"; num++; } else cout<<"insert ERROR\n"; } else if(s[0]=='d') { int r=0; while(s[++r]!='='); if(s[r-2]=='e') { string Username; while(s[++r]!=(' '+7)); while(s[++r]!=(' '+7)) Username+=s[r]; if(m[Username]==0) cout<<"delete ERROR\n"; else m1[m[Username]].username="",m[Username]=0, cout<<"delete OK\n",num--; } else if(s[r-2]=='d') { int sum=0; while(s[++r]!=' '); while(++r<len) sum=sum*10+(s[r]-'0'); if(m1[sum].username=="") cout<<"delete ERROR\n"; else m[m1[sum].username]=0,m1[sum].username="", cout<<"delete OK\n",num--; } } else if(s[0]=='s') { if(num==0) cout<<"Empty set\n"; else { for(int j=1;j<=flagid;j++) { if(m1[j].username!="") cout<<j<<" "<<m1[j].username<<" "<<m1[j].password<<" "<<m1[j].nickname<<endl; } } } } } }
纯模拟