文章目录

  • 题目解答
  • 题目链接

题目解答


来源: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相关推荐

  1. 命令行选项“/source-charset”与预编译头不一致

    命令行选项"/source-charset"与预编译头不一致 解决方法:不使用预编译头:

  2. centos6 升级gcc / 无法识别的命令行选项“-std=gnu++1y”的解决办法

    在npm过程遇到:错误:无法识别的命令行选项"-std=gnu++1y"的解决办法 1.下载源文件,并安装: wget http://people.centos.org/tru/d ...

  3. Qt Creator使用命令行选项

    Qt Creator使用命令行选项 使用命令行选项 使用自定义样式 使用命令行选项 您可以启动Qt Creator并从命令行指定一些选项.例如,您可以打开任何行和列的文件. 要指定命令行选项,请在Qt ...

  4. python如何选择命令_python 解析命令行选项

    问题: 程序如何能够解析命令行选项 解决方案 argparse 模块可被用来解析命令行选项 argparse 模块 argparse 模块是标准库中最大的模块之一,拥有大量的配置选项 dest 参数指 ...

  5. python执行脚本时的命令行选项_Python 处理脚本的命令行参数(二):使用click

    安装click pip install click 使用步骤 使用@click.command() 装饰一个函数,使之成为命令行接口 使用@click.option() 等装饰函数,为其添加命令行选项 ...

  6. PhantomJS命令行选项

    支持命令行选项有: --help或-h列出所有可能的命令行选项.立即停止,不会运行一个脚本作为参数传递. --version或-v打印的版本PhantomJS.立即停止,不会运行一个脚本作为参数传递. ...

  7. DISM 操作系统包 (.cab 或.msu) 服务命令行选项

    DISM 操作系统包 (.cab 或.msu) 服务命令行选项 使用 DISM 与 Windows cabinet (.cab) 或 Windows 更新独立安装程序 (.msu) 文件安装或删除的更 ...

  8. Horizon Client 配置设置和命令行选项

    Horizon Client 配置设置和命令行选项 Twitter FaceBook LinkedIn Weibo 添加到库 添加到库 RSS 下载 PDF 发送反馈 反馈 编辑 评论 更新时间 20 ...

  9. Microsoft Windows Installer 工具 Msiexec.exe 的命令行选项

    摘自:http://support.microsoft.com/kb/314881/zh-cn 概要 本文列出了 Windows Installer 工具 Msiexec.exe 的命令行选项.Msi ...

最新文章

  1. 《我也能做CTO之程序员职业规划》写作过程重播之二
  2. 163k地方门户网站系统团购定时结束限量控制
  3. 在Linux中挂载Windows端共享权限设定方法和出现报错的解决办法
  4. mybatis 打印SQL
  5. C++11 并发指南二(std::thread 详解)
  6. Van-UI发送验证码demo -效果篇
  7. mt4 不显示服务器速度,mt4上面怎么显示时间?
  8. linux查看编译器命令,关于驱动与编译器版本的查询命令
  9. extract进程 oracle,OracleGoldenGate系列:Extract进程的恢复原理
  10. Android中的消息通知Toast和Notification
  11. Axure如何建立共享项目、如何编辑共享项目、如何获取共享项目
  12. 【离散数学】命题逻辑
  13. 统信软件启用全新LOGO,迎接中国操作系统大时代
  14. IT人必须掌握的面试技巧
  15. 计算机基础-工控机、上位机、下位机、stm32、单片机
  16. Android中开启子线程的方法和应用场景
  17. css动画和js动画比较!
  18. mysql全文索引中英文混合_MySQL 英文全文搜索和中文全文搜索 (FULLTEXT)
  19. 百度地图坐标反查html,百度地图拾取坐标,可查询,可点选
  20. 修改cpu控制文件init.qcom.post_boot.改调节器

热门文章

  1. Java数据库 高级查询
  2. TensorFlow-Bitcoin-Robot:Tensorflow 比特币交易机器人
  3. 杂记整理二:linux与程序安装
  4. DropDownlist的Item显示多列数据
  5. 一个PHP程序的“怪问题”
  6. 数据库-ADONET-向数据库提交更新
  7. ajaxToolkit发布之后出错!说未能加载文件或程序集!
  8. class 第一个元素_第二章(第3节):网页元素定位和操作
  9. 列举ospf的5种报文类型_9种语言的应用场景,程序员的候选清单,你最看好哪一门语言...
  10. 【PC工具】强力推荐:最好用的日历笔记工具,没有之一!google日历