pat-1022

有一个点没过自己写的有点复杂,不先找了,总结一下错误   必须二刷

#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<cstring>
#include<cctype>
using namespace std;
map<string,set<int>> bkt,nfa,kew,npu;
//int book[10000]={},年份也不一定就一本书,book需要只存一个值时才能用
map<int,set<int>> nm;
int main(){
	int n,que;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		int tdi,nmm;
		
		char bt[80],na[80],ke[60],np[80];
		scanf("%d",&tdi);
		getchar();
		cin.getline(bt,80);
		
		cin.getline(na,80);
		bkt[bt].insert(tdi);
		nfa[na].insert(tdi);
		/*cin.getline(ke,60);
		int ll=0,rr=0;
		for(int q=0;q.ke.size())*/
		//变个数输入
       	while(cin>>ke ){
			kew[ke].insert(tdi);
			char c=getchar();//终止判断(注意)
			if(c=='\n') break; 
		}
		cin.getline(np,80);
		npu[np].insert(tdi);
		scanf("%d",&nmm);
		nm[nmm].insert(tdi); 
	}
	scanf("%d",&que);
     getchar();
	string temp;
	for(int i=0;i<que;i++){
		string temp;//此处也要用getline 
		getline(cin,temp);
		int io=stoi(temp.substr(0,1) ) ;//char变成string加个双引就可以了(注意)<-这种方式是错的 
		string oo=temp.substr(3);
		int ioo;
		if(io==5)  ioo=stoi(oo);
		printf("%s\n",temp.c_str());
		if(io==1&&bkt.find(oo)!=bkt.end()){
		
			
			for(auto it=bkt[oo].begin();it!=bkt[oo].end();it++){
			
				printf("%07d\n",*it);
			}
		    
			
		}
		else if(io==2&&nfa.find(oo)!=nfa.end()){
		
			
			for(auto it=nfa[oo].begin();it!=nfa[oo].end();it++){
				
				printf("%07d\n",*it);
			}
		   
		}
		else if(io==3&&kew.find(oo)!=kew.end()){
		
			for(auto it=kew[oo].begin();it!=kew[oo].end();it++){
				
				printf("%07d\n",*it);
			}
		    
				
		}
		else if(io==4&&npu.find(oo)!=npu.end()){
		
			for(auto it=npu[oo].begin();it!=npu[oo].end();it++){
				
				printf("%07d\n",*it);
			}
		    
			
		}
	        else if(io==5&&nm.find(ioo)!=nm.end()){
			
			
			for(auto it=nm[ioo].begin();it!=nm[ioo].end();it++){
			
				printf("%07d\n",*it);
			}
		    
		
		}
		else printf("Not Found\n");
		
	}
	return 0;
} 

总结 

1.每次用  getline 或者 cin.getline   在cin>>或者 scanf后面用   在scanf后面必须加getchar();

2.如果已经在scanf里面打出了一些要输入的字符,那么后面就不会输入了,直接输入里面没有的,比如上面你也可以先把‘\n’先打出来然后就不用getchar了

3.使用stoi  如果里面是char型,加双引也不对因为还有‘  ’,只能用substr,将其改为string型并且如果是重复临时变量,只能用cin输入

4.利用find函数,找是否存在某个值,map,也可以找第一个键存不存在,当不存在返回0冲突时只能这么干  !=。。。。.end()

英语

 

 

 

 

问题二刷  总结关于string  getline的各种问题

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值