首页 > 分享 > 复杂字符串模拟 2014 北邮 软院 数据库检索 AC代码

复杂字符串模拟 2014 北邮 软院 数据库检索 AC代码

#include<bits/stdc++.h> using namespace std; struct Node {//定义结构体string name,sex,yyyy,mm,dd;Node(string _name,string _sex,string _yyyy,string _mm,string _dd):name(_name),sex(_sex),yyyy(_yyyy),mm(_mm),dd(_dd){} }; int main() {//freopen("kkk.txt","r",stdin);//???????记得删除std::ios::sync_with_stdio(false);//*** 很重要 输入加速int t,n,m; cin>>t; while(t--){vector<Node> zong;cin>>n>>m;string ss;getline(cin,ss);//***很重要 吸收换行符 while(n--){//输入string str,name,sex,yyyy,mm,dd;getline(cin,str);//整行读入int pos=str.find(" ",0);name=str.substr(0,pos);int pos1=str.find(" ",pos+1);sex=str.substr(pos+1,pos1-pos-1);int pos2=str.find("/",pos1);yyyy=str.substr(pos1+1,pos2-pos1-1);int pos3=str.find("/",pos2+1);mm=str.substr(pos2+1,pos3-pos2-1);dd=str.substr(pos3+1,str.length()-pos3);//***特别注意上面的这个提取部分 真麻烦zong.push_back(Node(name,sex,yyyy,mm,dd));//结构体简捷赋值}while(m--){bool flag;//流水线过程vector<int> s1;vector<int> s2;vector<int> s3;vector<int> s4;vector<int> s5;//一定要放在这里 防止初始化问题string str,name,sex,yyyy,mm,dd; getline(cin,str);//整行读入 int pos=-1;pos=str.find("Name",0); if(pos==-1) for(int i=0;i<zong.size();i++) s1.push_back(i);//流水else{int posn1=str.find("'",pos);int posn2=str.find("'",posn1+1);name=str.substr(posn1+1,posn2-posn1-1);//提取flag=false;for(int i=0;i<zong.size();i++)if(zong[i].name==name) {s1.push_back(i);flag=true;}//流水if (flag==false) {printf("NULLn");continue;}//特判 查找该项但是没有符合条件的} //********* pos=-1;pos=str.find("Sex",0);if(pos==-1) for(int i=0;i<s1.size();i++) s2.push_back(s1[i]);//流水else{int poss1=str.find("'",pos);int poss2=str.find("'",poss1+1);sex=str.substr(poss1+1,poss2-poss1-1);//提取flag=false;for(int i=0;i<s1.size();i++)if(zong[s1[i]].sex==sex) {flag=true;s2.push_back(s1[i]);}//流水if (flag==false) {printf("NULLn");continue;}//特判 查找该项但是没有符合条件的}//**********pos=-1;pos=str.find("Birthday",0);if(pos==-1)//*****输出 printf不能直接输出string 要用.c_str转换for(int i=0;i<s2.size();i++) printf("%sn",zong[s2[i]].name.c_str());else{int p1=str.find("'",pos);int p2=str.find("/",p1+1);yyyy=str.substr(p1+1,p2-p1-1);//提取if(yyyy=="*") for(int i=0;i<s2.size();i++) s3.push_back(s2[i]);//流水else{flag=false;for(int i=0;i<s2.size();i++){if(zong[s2[i]].yyyy==yyyy) s3.push_back(s2[i]);flag=true;}//流水if(flag==false){printf("NULLn");continue;}//特判 查找该项但是没有符合条件的}int p3=str.find("/",p2+1);mm=str.substr(p2+1,p3-p2-1);//提取if(mm=="*") for(int i=0;i<s3.size();i++) s4.push_back(s3[i]);//流水else{flag=false;for(int i=0;i<s3.size();i++) {if(zong[s3[i]].mm==mm) s4.push_back(s3[i]);flag=true;}//流水if(flag==false){printf("NULLn");continue;}//特判 查找该项但是没有符合条件的}int p4=str.find("'",p3+1);dd=str.substr(p3+1,p4-p3-1);//提取if(dd=="*") for(int i=0;i<s4.size();i++) s5.push_back(s4[i]);//流水else{flag=false;for(int i=0;i<s4.size();i++) {if(zong[s4[i]].dd==dd) s5.push_back(s4[i]);flag=true;}//流水if(flag==false){printf("NULLn");continue;}//特判 查找该项但是没有符合条件的} //printf不能直接输出string类型,只能输出char 因为string是STL,不是变量名if(s5.size()==0) printf("NULLn");//主要输出else //不能用cout,会超时 for(int i=0;i<s5.size();i++) printf("%sn",zong[s5[i]].name.c_str());}}}return 0; }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关知识

中文期刊全文数据库检索方法与技巧
JZOJ 3887. 【长郡NOIP2014模拟10.22】字符串查询
【蓝蓝高频面试之数据库系列】第一期数据库基础20题
检索字段符课件
为什么我的汉字在c#字符串中没有正确显示?
希腊罗马史数据库检索入门—Clauss
信息检索ISI
如果分别以检索词 a、b、c在某数据库的关键词字段进行检索都能得到相应的检索结果
计算与检索方法
CA1054:URI 参数不应为字符串(代码分析)

网址: 复杂字符串模拟 2014 北邮 软院 数据库检索 AC代码 https://m.huajiangbk.com/newsview105367.html

所属分类:花卉
上一篇: 多目标优化概念精选(九篇)
下一篇: 舍得 日志