ccf-命令行选项-201403-3
分析: 这道题不是很难 用了一个split()函数
核心是: 对命令选项的判断 不要一个字符字符的判断 要一项一项的判断
比如ab:m:
分析步骤 (1) 读取一个字符(2)判断下一步是否有字符,下一个字符是否是':', 若是':",前进两位,标为带参数 否则前进一位,不带参数
对于命令的分析也是
不带参数 读取一项
带参数 读取两项
即--------整体分析,这样的循环结构是清晰简洁的
缺点 :用了好多if-else结构 不好看
#include <bits/stdc++.h>
using namespace std;
const int N=;
int is_c[N]; // 是否带参数
bool flag[N]; // 是否出现
string w[N]; // 记录参数
int n;
vector <string> split (string str,const char flag=' ') {
istringstream iss(str);
vector <string> ans;
while (getline(iss,str,flag))
if (str.size())
ans.push_back(str);
return ans;
}
void get_ord (string str) {
int i=;
while (i<str.size()) {
if (i<str.size()&&str[i+]==':') {
is_c[str[i]-'a']=;
i+=;
}
else { is_c[str[i]-'a']=; i+=; }
}
}
int main ()
{
string ord; cin>>ord; get_ord(ord);
cin>>n; getchar();
int T=;
while (++T<=n) {
string str; getline(cin,str);
vector <string> sv=split(str);
memset (flag,,sizeof(flag));
cout<<"Case "<<T<<":";
for (int i=;i<sv.size();i++) {
if (sv[i].size()==&&sv[i][]=='-') {
int id=sv[i][]-'a';
if (is_c[id]) {
flag[id]=;
if (is_c[id]==) {
if (i+<sv.size()) w[id]=sv[++i]; // 这个不判断的话只有90
else break;
}
}
else break;
}
else break;
}
for (int i=;i<N;i++)
if (flag[i]) {
char ch='a'+i; cout<<" -"<<ch;
if (is_c[i]==) cout<<" "<<w[i];
}
cout<<"\n";
}
return ;
}
ccf-命令行选项-201403-3的更多相关文章
- 命令行选项解析函数(C语言):getopt()和getopt_long()
命令行选项解析函数(C语言):getopt()和getopt_long() 上午在看源码项目webbench时,刚开始就被一个似乎挺陌生函数getopt_long()给卡住了,说实话这函数没怎么见过, ...
- NUnit-Console 命令行选项详解
本文为 Dennis Gao 原创或翻译技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. NUnit-Console 命令行选项 NUnit-Console 命令行选项列表 指定运行哪 ...
- python argparse模块解析命令行选项简单使用
argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...
- argparse - 命令行选项与参数解析(转)
argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...
- 命令行选项 - Mozilla 产品与私有技术 | MDN - Google Chrome
命令行选项 在本文章中 语法规则 使用命令行选项 示例 用户配置档 -CreateProfile profile_name -CreateProfile "profile_name prof ...
- LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
如果安装LoadRunner 11时弹窗提示"Micosoft Visual C++ 2005 SP1 可再发行组件包(X86):'命令行选项语法错误.键入命令 / ? 可获得帮助信息'&q ...
- pytest 常用命令行选项(二)
本文接上篇继续简介pytest常用的命令行选项. 8.-v(--verbose) 选项 使用-v/--verbose选项,输出的信息会更详细.最明显的区别就是每个文件中的每个测试用例都占一行,测试的名 ...
- pytest 常用命令行选项(一)
pytest有丰富的命令行选项,以满足不同的需要,下面对常用的命令行选项作下简单介绍. 上文已经使用过-v选项,还有很多选项,你可以使用pytest --help查看全部选项.如下图: 1.--co ...
- 安装loadrunner时出现”命令行选项语法错误键入命令 \?获得帮助“的解决方法
安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息1.进入loadrunner-11\Addition ...
- 详解Top命令 输出命令行选项及代码
Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服务器的负载.在本篇中,我们会探索top命令的细节.top命令是一个交互命令.在运行top的时候还可以运 ...
随机推荐
- Surface RT2使用情况
Surface RT2是一个6年的古董了,暂时还能使用的功能包括但不限于一些xbox小游戏,ppt阅读(加载慢),pdf阅读(加载慢),word阅读. 2018/6/16 爱奇艺关闭了大部分win8R ...
- vue中computed、metfods、watch的区别
一.computed和methods 我们可以将同一函数定义为一个 method 或者一个计算属性.对于最终的结果,两种方式确实是相同的. 不同的是computed计算属性是基于它们的依赖进行缓存的. ...
- Jmeter之正则表达式提取器应用
说到Jmeter正则表达式提取器的应用,就不得不说到关联.所谓关联,就是把应用中动态变化返回的数据获取到,把它保存为一个参数,提供给后面需要用到的地方进行使用. Jmeter中关联是通过“添加—后置处 ...
- 面试题:电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试?
目的 面试的时候,面试官出题可能会出其不意: 比如随意指定生活当中的一件物品,问你如何测试,见下 作为测试人员,电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试? 面试官的考察点 1.在没有需求文档或者 ...
- vue中几种常见技巧
1.校验延迟:点击进入页面不希望校验必填字段this.$nextTick(() => { this.$refs.formRules.clearValidate() })2.$on $emit $ ...
- 阿里云已买到域名价格统计js代码
var sum = 0; $('.table-hover tr.ng-scope').each(function(){ sum = sum + parseInt($(this).children()[ ...
- git命令提交新项目
新建的项目没有与git关联过git initgit add .git commit -m "注释"git remote add origin 新SSH:URLgit push -f ...
- 活代码LINQ——05
片段代码: ' Exercise 9.3 Solution: Invoice.vb ' Invoice class. Public Class invoide ' declare variables ...
- express3/4引入socket.io
app.js var express = require('express'); var path = require('path'); var session = require('express- ...
- canvas初体验
利用画布,绘制随机大小,颜色,位置 方框<!DOCTYPE html> <html lang="en"> <head> <meta cha ...