CCF 命令行选项
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct state{
char c;
int tag;//0:不带参数,1:带参数
};
struct result1{
int i;
char * s;
};
int main()
{
struct state cs[52];
char c;
scanf("%c",&c);
int len=0;
while(c!='\n'){
if(c!=':'){cs[len].c=c;cs[len++].tag=0;}
else {cs[len-1].tag=1;}
scanf("%c",&c);
}
int n;
scanf("%d",&n);getchar();
char od[n][256];
for(int i=0;i<n;i++)
gets(od[i]);
/**对cs排序*/
for(int i=1;i<len;i++)
for(int j=0;j<len-i;j++){
if(cs[j].c>cs[j+1].c){
int t1,t2;
t1=cs[j].c;t2=cs[j].tag;
cs[j].c=cs[j+1].c;cs[j].tag=cs[j+1].tag;
cs[j+1].c=t1;cs[j+1].tag=t2;
}
}
struct result1 r[len];
for(int i=0;i<n;i++){
for(int i=0;i<len;i++) r[i].i=0;
int k,j=0,flag=0;char c1;
while(od[i][j]!='\0'&&flag==0){
while(od[i][j]!='-'&&od[i][j]!='\0') j++;
if(od[i][j]=='-'){
c1=od[i][++j];
for(k=0;k<len;k++){
if(c1==cs[k].c){
if(cs[k].tag==1){/**该选项带参数*/
while(od[i][++j]==' ');
if(od[i][j]=='-'||od[i][j]=='\0'){flag=1;}
else {r[k].i=1;r[k].s=&od[i][j];while(od[i][++j]!=' ');od[i][j++]='\0';}
}
else{/**该选项不带参数*/
while(od[i][++j]==' ');
if(od[i][j]!='-'&&od[i][j]!='\0'){flag=1;}
else r[k].i=1;
}
break;
}
}
if(k==len)/**没有该选项*/
flag=1;
}
}
/**输出*/
printf("Case %d: ",i);
for(int i=0;i<len;i++){
if(r[i].i==1){
if(cs[i].tag==0)
printf("-%c ",cs[i].c);
else
printf("-%c %s ",cs[i].c,r[i].s);
}
}
printf("\n");
}
return 0;
}