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