CCF 201403-3 命令行选项

思路:每行的命令用getline( )读入,读入后把其输入到streamstring中,每次以空格分隔成字符串,判断每一个字符串是否合法。最后把合法的选项存入到map中,map正好符合题意:当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。

几大坑点:

  1. cin>>输入后缓冲区会剩下换行符,用cin.ingore()来清空缓冲区,否则,getline( )读不到第一行命令。
  2. 最后的输出的时候:之后有一个空格,否则,会的0分。

代码如下:

#include<iostream>
#include<string>
#include<sstream>
#include<map>

using namespace std;

int main(){
    string str0;
    cin>>str0;
    int n;
    cin>>n;
//    清空了输入缓冲区的当前行,使上次的输入残留下的数据没有影响到下一次的输入
    cin.ignore();
    for(int i = 1; i <= n; i++){
        map<string,string> m;
        string str1,arg;
        getline(cin,str1);
        stringstream ss;
        ss<<str1;
        ss>>str1;//先跳过第一个
        while(ss>>str1){
            if(str1[0] == '-'){
                int index = str0.find(str1[1]);
                if(index == -1)//非法选项
                    break;
                else{
                    if(index == str0.size()-1)//不带参数
                        m[str1] = "";
                    else if(str0[index+1] != ':')//不带参数
                        m[str1] = "";
                    else if(str0[index+1] == ':'){//带参数
                        if(ss>>arg)
                            m[str1] = arg;
                        else
                            break;
                    }
                }
            }
            else//非法选项
                break;
        }
        cout<<"Case "<<i<<": ";//冒号之后有空格,没有0分。
        map<string,string> :: iterator it;
        for(it = m.begin(); it != m.end(); it++){
            cout<<it->first<<' '<<it->second<<' ';
        }
        cout<<endl;
        ss.clear();
        ss.str("");
    }
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值