csp2014-3-3 命令行选项

1.运行结果

2.思路解析

模拟字符串,首先通过stringstream将输入以空格分割成若干字符串,判断是否合法(为命令行选项),若为带参选项则将其后一个字符串存入ans,若为不带参选项则存入一个不属于参数的字符,注意输入时用cin.ignore过滤掉换行符。

3.代码

#include<bits/stdc++.h>
using namespace std;
map<char,int>coline;
int n;
void trans(string str)//命令行选项---是否带参 
{
	int len=str.size();
	for(int i=0;i<len;i++)
	{
		if(str[i]==':')continue;
		if((i+1<len)&&(str[i+1]==':'))
		{
			coline[str[i]]=1;
		}
		else
		coline[str[i]]=2;
	} 
}
int main()
{
	string str,tmp;
	cin>>str;
	trans(str);
	cin>>n;
	cin.ignore();//需过滤换行符 
	for(int i=1;i<=n;i++)
	{
		getline(cin,tmp);
		vector<string>ss;
		map<char,string>ans;//按key排序 
		stringstream ssin(tmp);
        while(ssin>>tmp) ss.push_back(tmp);//将输入以空格分成若干字符串 
		for(int j=1;j<ss.size();j++)
		{
			if(ss[j][0]!='-'||ss[j][1]<'a'||ss[j].size()!=2)break;
			char c=ss[j][1];
			if(coline[c]==1&&j+1<ss.size())//带参 
			{
				ans[c]=ss[j+1];
				j++;
			}
			else if(coline[c]==2)//不带参 
			{
				ans[c]="#";
			}
			else
			break;
		}
		cout<<"Case "<<i<<": ";
        for(auto it:ans)
        {
        	if(it.second=="#")
        	cout<<"-"<<it.first<<" ";
        	else
        	cout<<"-"<<it.first<<" "<<it.second<<" ";
		}
		cout<<endl;
	}
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值