(算法练习)——201403-3命令行选项(CCF模拟)

90分代码。。。改不动了。。。
代码:

#include <stdio.h>
#include <map>
#include <sstream>
#include <string.h>
#include <string>
#include <iostream>
using namespace std;

map<char,int>canshuji;    //不同的char对应相同的数字
 
int main(){
    
    
	string str;
	cin>>str;
	for(int i = 0;i <str.size();i++){
    
    
		if(str[i+1] != ':'){
    
    
			canshuji[str[i]] = -1;   //表示无参数,这里不能用0,不方便后面的判断 
		}
		else{
    
    
			canshuji[str[i]] = 1;
			i++;     //跳过:这一位 
		}
	}
	int n;
	scanf("%d",&n);
	getchar();
	int ans[300];  //需要重置 
	for(int i = 1;i <=n;i++){
    
    
		string ss;    //参数行每一行 
		getline(cin,ss);
		int po = 0;
		map<char,string>chuli;
		for(int j = 0;j <ss.size();j++){
    
    
			if(ss[j] == ' '){
    
    
				ans[po] = j;
				po++;
			}
		}
		if(po == 0){
    
          //没有空格说明不合法,为空 
			printf("Case %d:\n",i);
		}
		else{
    
      
			for(int k = 0;k <po;k++){
    
    
				string fenge;      //每一个分割的子串 
				fenge = ss.substr(ans[k]+1,ans[k+1]-ans[k]-1);
				if(fenge[0] == '-' && fenge.size() == 2 ){
    
    
					map<char,int>::iterator it = canshuji.find(fenge[1]);
					if(it->second == -1){
    
    
						chuli[fenge[1]] = "-1";
					}
					else if(it->second == 1){
    
    
						string sl;
						sl = ss.substr(ans[k+1]+1,ans[k+2]-ans[k+1]-1);   
						chuli[fenge[1]] = sl;
						k++;
					}
					else{
    
    
						break;
					}
				}
				else{
    
    
					break;
				}
			}
			//每一行完毕要输出
			printf("Case %d: ",i);
			for(map<char,string>::iterator it = chuli.begin();it != chuli.end();it++){
    
    
				cout<<"-"<<it->first<<" ";
				if(canshuji[it->first] == 1){
    
    
					cout<<it->second<<" ";
				}
			}
			printf("\n");
		}
		memset(ans,0,sizeof(ans));
	}
	
	
}

猜你喜欢

转载自blog.csdn.net/weixin_42377217/article/details/104390492
今日推荐