CSP认证201403-3 命令行选项[C++题解]:模拟题、字符串处理、stringstream处理getline
文章目录
- 题目解答
- 题目链接
题目解答
来源:acwing
分析:
输出要求:对于无参数的选项,输出即可,当然每个只需要输出一次;对于有参数的选项,需要输出最后出现时所带的参数。
当遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。
比如下面例子, -a是无参数的选项,所以 第二次出现时后面带有参数就是不合法的,我们直接忽略,结果就是 -a -l
,后面的-b被忽略。
ls -a -l -a documents -b
这里使用getline()
读入一行,然后这一行怎么拆分呢?使用的是stringstream
类,实例化对象ssin,它从字符串中读取字符,以空格切分。然后将拆分出来的每个单词放到vector中。 具体如下:ssin是变量名,可以随便取。
stringstream ssin(str);//从字符串开始读,以空格隔开
vector<string> ops;while(ssin>>str) ops.push_back(str);
同时:对于无参数的选项和有参数的选项我们开两个bool数组来存,o1[]
存 无参数的,o2[]
存有参数的,出现过置为true,这样就可以知道每个选项带参数与否。
最终的结果存在ans[]
数组中,这个数组的目的是确保哪个选项是要被输出的,如果是无参的,随便填个数占位;如果是有参的,这里存的是参数。
ac代码
#include<bits/stdc++.h>
using namespace std;
const int N = 30;
int n;
bool o1[N], o2[N];// o1是无参数, o2是有参数
string ans[N]; //存答案int main(){string str;cin >> str;for(int i = 0; i< str.size(); i++)if( i+ 1 < str.size() && str[i+1] == ':'){o2[str[i] - 'a'] = true; // 有参数的i++; // 跳过冒号}else o1[str[i] - 'a'] = true; // 无参数的cin >> n;getchar();for(int C = 1;C <= n; C++){printf("Case %d:", C);getline(cin, str);stringstream ssin(str);vector<string> ops;while(ssin >> str) ops.push_back(str);for(int i = 0; i < 26; i++) ans[i].clear();// 处理每个命令行选项for(int i =1; i< ops.size(); i++){if(ops[i][0] != '-' || ops[i][1] < 'a' || ops[i].size() != 2)break;int k = ops[i][1] - 'a'; //选项的编号if(o1[k]) ans[k] = "*";// 有参数的,ans[k]存的是参数值else if( o2[k] && i + 1 < ops.size() ) ans[k] = ops[i+1], i ++;else break;}// 按照字典序输出选项 a ~ zfor(int i = 0; i< 26; i++){if( ans[i].size()){cout << " -" << (char)(i + 'a');if(o2[i]) cout << ' ' << ans[i];}}cout << endl;}
}
题目链接
https://www.acwing.com/problem/content/3202/
CSP认证201403-3 命令行选项[C++题解]:模拟题、字符串处理、stringstream处理getline相关推荐
- 命令行选项“/source-charset”与预编译头不一致
命令行选项"/source-charset"与预编译头不一致 解决方法:不使用预编译头:
- centos6 升级gcc / 无法识别的命令行选项“-std=gnu++1y”的解决办法
在npm过程遇到:错误:无法识别的命令行选项"-std=gnu++1y"的解决办法 1.下载源文件,并安装: wget http://people.centos.org/tru/d ...
- Qt Creator使用命令行选项
Qt Creator使用命令行选项 使用命令行选项 使用自定义样式 使用命令行选项 您可以启动Qt Creator并从命令行指定一些选项.例如,您可以打开任何行和列的文件. 要指定命令行选项,请在Qt ...
- python如何选择命令_python 解析命令行选项
问题: 程序如何能够解析命令行选项 解决方案 argparse 模块可被用来解析命令行选项 argparse 模块 argparse 模块是标准库中最大的模块之一,拥有大量的配置选项 dest 参数指 ...
- python执行脚本时的命令行选项_Python 处理脚本的命令行参数(二):使用click
安装click pip install click 使用步骤 使用@click.command() 装饰一个函数,使之成为命令行接口 使用@click.option() 等装饰函数,为其添加命令行选项 ...
- PhantomJS命令行选项
支持命令行选项有: --help或-h列出所有可能的命令行选项.立即停止,不会运行一个脚本作为参数传递. --version或-v打印的版本PhantomJS.立即停止,不会运行一个脚本作为参数传递. ...
- DISM 操作系统包 (.cab 或.msu) 服务命令行选项
DISM 操作系统包 (.cab 或.msu) 服务命令行选项 使用 DISM 与 Windows cabinet (.cab) 或 Windows 更新独立安装程序 (.msu) 文件安装或删除的更 ...
- Horizon Client 配置设置和命令行选项
Horizon Client 配置设置和命令行选项 Twitter FaceBook LinkedIn Weibo 添加到库 添加到库 RSS 下载 PDF 发送反馈 反馈 编辑 评论 更新时间 20 ...
- Microsoft Windows Installer 工具 Msiexec.exe 的命令行选项
摘自:http://support.microsoft.com/kb/314881/zh-cn 概要 本文列出了 Windows Installer 工具 Msiexec.exe 的命令行选项.Msi ...
最新文章
- 《我也能做CTO之程序员职业规划》写作过程重播之二
- 163k地方门户网站系统团购定时结束限量控制
- 在Linux中挂载Windows端共享权限设定方法和出现报错的解决办法
- mybatis 打印SQL
- C++11 并发指南二(std::thread 详解)
- Van-UI发送验证码demo -效果篇
- mt4 不显示服务器速度,mt4上面怎么显示时间?
- linux查看编译器命令,关于驱动与编译器版本的查询命令
- extract进程 oracle,OracleGoldenGate系列:Extract进程的恢复原理
- Android中的消息通知Toast和Notification
- Axure如何建立共享项目、如何编辑共享项目、如何获取共享项目
- 【离散数学】命题逻辑
- 统信软件启用全新LOGO,迎接中国操作系统大时代
- IT人必须掌握的面试技巧
- 计算机基础-工控机、上位机、下位机、stm32、单片机
- Android中开启子线程的方法和应用场景
- css动画和js动画比较!
- mysql全文索引中英文混合_MySQL 英文全文搜索和中文全文搜索 (FULLTEXT)
- 百度地图坐标反查html,百度地图拾取坐标,可查询,可点选
- 修改cpu控制文件init.qcom.post_boot.改调节器
热门文章
- Java数据库 高级查询
- TensorFlow-Bitcoin-Robot:Tensorflow 比特币交易机器人
- 杂记整理二:linux与程序安装
- DropDownlist的Item显示多列数据
- 一个PHP程序的“怪问题”
- 数据库-ADONET-向数据库提交更新
- ajaxToolkit发布之后出错!说未能加载文件或程序集!
- class 第一个元素_第二章(第3节):网页元素定位和操作
- 列举ospf的5种报文类型_9种语言的应用场景,程序员的候选清单,你最看好哪一门语言...
- 【PC工具】强力推荐:最好用的日历笔记工具,没有之一!google日历