zoukankan      html  css  js  c++  java
  • ccf-命令行选项-201403-3

    分析: 这道题不是很难 用了一个split()函数

    核心是: 对命令选项的判断 不要一个字符字符的判断 要一项一项的判断

                 比如ab:m:  

    分析步骤 (1) 读取一个字符(2)判断下一步是否有字符,下一个字符是否是':', 若是':",前进两位,标为带参数 否则前进一位,不带参数

    对于命令的分析也是

    不带参数 读取一项

    带参数   读取两项

    即--------整体分析,这样的循环结构是清晰简洁的

    缺点 :用了好多if-else结构 不好看

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=30;
     4 int  is_c[N]; // 是否带参数
     5 bool flag[N]; // 是否出现 
     6 string  w[N];  // 记录参数
     7 int n;
     8 vector <string> split (string str,const char flag=' ') {
     9     istringstream iss(str);
    10     vector <string> ans;
    11     while (getline(iss,str,flag)) 
    12         if (str.size())
    13             ans.push_back(str);
    14     return ans;
    15 }
    16 void get_ord (string str) {
    17     int i=0;
    18     while (i<str.size()) {
    19         if (i<str.size()&&str[i+1]==':') {
    20             is_c[str[i]-'a']=2;
    21             i+=2;
    22         }
    23         else { is_c[str[i]-'a']=1; i+=1; }
    24     }
    25 }
    26 int main ()
    27 {
    28     string ord; cin>>ord; get_ord(ord); 
    29     cin>>n; getchar();
    30     int T=0;
    31     while (++T<=n) {
    32         string str;  getline(cin,str);
    33         vector <string> sv=split(str);
    34         memset (flag,0,sizeof(flag));
    35         cout<<"Case "<<T<<":";
    36         for (int i=1;i<sv.size();i++) {
    37             if (sv[i].size()==2&&sv[i][0]=='-') {
    38                 int id=sv[i][1]-'a';  
    39                 if (is_c[id]) {
    40                     flag[id]=1;
    41                     if (is_c[id]==2) {
    42                         if (i+1<sv.size())   w[id]=sv[++i];  // 这个不判断的话只有90
    43                         else                 break;
    44                     }
    45                 }
    46                 else break;
    47             }
    48             else    break;
    49         }
    50         for (int i=0;i<N;i++)
    51             if (flag[i]) {
    52                 char ch='a'+i; cout<<" -"<<ch;
    53                 if (is_c[i]==2) cout<<" "<<w[i]; 
    54             } 
    55         cout<<"
    ";
    56     }
    57     return 0;
    58 }

                      

    抓住青春的尾巴。。。
  • 相关阅读:
    【css系列】创建网页加载进度条
    【大数据系列】apache hive 官方文档翻译
    【大数据系列】问题汇总
    【大数据系列】hive修改默认的derby数据库
    【大数据系列】hive安装及启动
    【大数据系列】MapReduce详解
    【大数据系列】基于MapReduce的数据处理 SequenceFile序列化文件
    【大数据系列】windows下连接Linux环境开发
    【大数据系列】常用命令
    【大数据系列】hadoop脚本分析
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/10500715.html
Copyright © 2011-2022 走看看