这题真坑,带参命令如果后面没有参数,也是非法的,最开始忽略了,考虑问题要全面,还要细心!!!
#include<iostream>
#include<string.h>
using namespace std;
string format; //格式字符串
int classify(string s) //用来判断是代参数命令 无参命令 或者非法命令 分别返回 2 1 0
{
int i;
for(i=0; format[i]!='\0'; i++)
{
if(s[0]=='-' && s[1]==format[i])
if(format[i+1]==':') return 2;
else return 1;
}
return 0;
}
void sort(string s[],int index) //用来排序 插入排序的思想
{
int i,j;
string str = s[index];
for(i = 0; i<index; i++)
{
if(s[index]<s[i])
{
for(j = index; j>i; j--)
{
s[j] = s[j-1];
}
s[j]=str;
break;
}
}
}
int main()
{
int N,i,j,k;
string s[20][256];
cin>>format>>N;
string gj;
for(i = 0; i<N; i++)
{
cin>>gj;
for(j = 0; cin.get()!='\n'; j++)
cin>>s[i][j];
s[i][j]="#";
}
for(i = 0; i<N; i++) //命令行处理过程
{
for(j = 0; s[i][j]!="#"; j++)
{
if(classify(s[i][j])==2)
{
if(s[i][j+1]=="#")
{
s[i][j] = "#";
break;
}
else
{
for(k=0; k<j; k++)
if(s[i][k][1]==s[i][j][1])
s[i][k] = "";
s[i][j] = s[i][j]+" "+s[i][j+1];
s[i][j+1] = "";
sort(s[i],j);
j++;
}
}
else if(classify(s[i][j])==1)
{
for(k=0; k<j; k++)
if(s[i][k][1]==s[i][j][1])
s[i][k] = "";
sort(s[i],j);
}
else
{
s[i][j] = "#";
break;
}
}
}
for(i=0; i<N; i++)
{
cout<<"Case "<<i+1<<": ";
for(j=0; s[i][j]!="#"; j++)
{
if(s[i][j]!="")
cout<<s[i][j]<<" ";
}
if(i!=N-1)
cout<<endl;
}
return 0;
}