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;
}