• 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 }

                      

    抓住青春的尾巴。。。
  • 相关阅读:
    【洛谷 p3386】模板-二分图匹配(图论)
    【洛谷 p3374】模板-树状数组 1(数据结构)
    【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)
    【洛谷 p3368】模板-树状数组 2(数据结构)
    【洛谷 P3385】模板-负环(图论--spfa)
    【poj 3080】Blue Jeans(字符串--KMP+暴力枚举+剪枝)
    【poj 2185】Milking Grid(字符串--KMP+问题分解)
    【poj 3461】Oulipo(字符串--KMP)
    正则表达式
    表单
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/10500715.html
Copyright © 2020-2023  润新知