Day2 备战CCF-CSP练习

news/2024/10/9 9:42:30

Day2

题目描述

请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。

每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。

这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。

在工具名字之后可能会包含若干选项,然后可能会包含一些不是选项的参数。

选项有两类:带参数的选项和不带参数的选项。

一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如 -a-b

而带参数选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相同,后者则是该选项的参数,是由小写字母,数字和减号组成的非空字符串。

该命令行工具的作者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。

这个字符串由若干小写字母和冒号组成,其中的每个小写字母表示一个该程序接受的选项。

如果该小写字母后面紧跟了一个冒号,它就表示一个带参数的选项,否则则为不带参数的选项。

例如,ab:m: 表示该程序接受三种选项,即 -a(不带参数),-b(带参数),以及 -m(带参数)。

命令行工具的作者准备了若干条命令行用以测试你的程序。

对于每个命令行,你的工具应当一直向后分析。

当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。

命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。

输入格式

输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 \(52\)

格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。

输入的第二行是一个正整数 \(N\),表示你需要处理的命令行的个数。

接下来有 \(N\) 行,每行是一个待处理的命令行,它包括不超过 \(256\)个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。

输出格式

输出有 \(N\) 行。其中第 \(i\) 行以 Case i:开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。

如果一个选项在命令行中出现了多次,只输出一次。

如果一个带参数的选项在命令行中出现了多次,只输出最后一次出现时所带的参数。

数据范围

\(1≤N≤20\)
对于每组数据,所有命令行工具的名字一定相同,且由小写字母构成。

输入样例:

albw:x
4
ls -a -l -a documents -b
ls
ls -w 10 -x -w 15
ls -a -b -c -d -e -l

输出样例:

Case 1: -a -l
Case 2:
Case 3: -w 15 -x
Case 4: -a -b

题目分析

模拟题 字符串处理
hash表映射记录带不带参数即可,字典序排列用map内部的默认排序即可,剩下的就是字符串分割处理,模仿python3 中的 split()函数实现字符串分割即可,然后参数一个个判断

C++代码

注意用C++17可以用auto [k , v] : map遍历
C++14不支持,只能auto pair : map 或者 for(map<string , string>::iterator it = map.begin() ; it != map.end() ; it ++)遍历

C++代码

C++14

#include <bits/stdc++.h>
using namespace std;string op;
map<string , int> opera;int n;
string line;vector<string> substr(string line)
{vector<string> ans;for(int i = 0 ; i < line.size() ; i ++){string word = "";while(i < line.size() && line[i] != ' ') word = word + line[i ++];ans.push_back(word);}return ans;
}int main()
{cin >> op;cin >> n;for(int i = 0 ; i < op.size() ; i ++){string res = "-" + op.substr(i , 1);if(op[i + 1] == ':')opera[res] = 1 , i ++;else opera[res] = 2;}getline(cin , line);for(int l = 1 ; l <= n ; l ++){getline(cin , line);vector<string> ops = substr(line);map<string , string> res;for(int i = 1 ; i < ops.size() ; i ++){if(opera[ops[i]] == 0) break;else if(opera[ops[i]] == 2) res.insert({ops[i] , ""});else {if(i + 1 >= ops.size()) break;res[ops[i]] = ops[i + 1] , i ++;}}cout << "Case " << l << ":";for(auto it : res)if(it.second != "") cout << " " << it.first << " " << it.second;else cout << " " << it.first;cout << endl;}return 0;
}

C++17

#include <bits/stdc++.h>
using namespace std;string op;
map<string , int> opera;int n;
string line;vector<string> substr(string line)
{vector<string> ans;for(int i = 0 ; i < line.size() ; i ++){string word = "";while(i < line.size() && line[i] != ' ') word = word + line[i ++];ans.push_back(word);}return ans;
}int main()
{cin >> op;cin >> n;for(int i = 0 ; i < op.size() ; i ++){string res = "-" + op.substr(i , 1);if(op[i + 1] == ':')opera[res] = 1 , i ++;else opera[res] = 2;}getline(cin , line);for(int l = 1 ; l <= n ; l ++){getline(cin , line);vector<string> ops = substr(line);map<string , string> res;for(int i = 1 ; i < ops.size() ; i ++){if(opera[ops[i]] == 0) break;else if(opera[ops[i]] == 2) res.insert({ops[i] , ""});else {if(i + 1 >= ops.size()) break;res[ops[i]] = ops[i + 1] , i ++;}}cout << "Case " << l << ":";for(auto [k , v] : res)if(v != "") cout << " " << k << " " << v;else cout << " " << k;cout << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

oop实验1

task1:1 // 现代C++标准库、算法库体验2 // 本例用到以下内容:3 // 1. 字符串string, 动态数组容器类vector、迭代器4 // 2. 算法库:反转元素次序、旋转元素5 // 3. 函数模板、const引用作为形参6 7 #include <iostream>8 #include <string>9 #include <vector…

MySQL 官宣:支持读写分离了!!

我们一直在等待的 MySQL 读/写分离功能 现在终于可以使用了! 在规模上,我们在副本之间分配读取,但这必须在应用程序中以某种方式进行管理:指向在某个地方写入并在其他地方读取。 在 MySQL 8.2 中,MySQL Router 现在能够识别读取和写入,并将它们路由到主实例(如果是 Inno…

【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?

引言 受小程序camera组件预览和抽帧图像不一致的特性影响,一直未全功能支持全屏模式,详见本系列文件第四节小程序如何抽帧;随着插件在云上赛事、健身锻炼、AI体测、AR互动场景的深入应用,各开发者迫切的希望能在全屏模式下应用,以便获得更合理的UI布局和更佳的用户体验,经…

实战逆向RUST语言程序

实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为例,演示Rust逆向该如何去做。关于Rust逆向,其实就是看汇编,考验选手的基础逆向能力。在汇编代码面前,任何干扰都会成为摆设。实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为…

AI课堂教学质量评估系统

AI课堂教学质量评估系统利用摄像头和人脸识别技术,AI课堂教学质量评估系统实时监测学生的上课表情和课堂行为。同时,系统还结合语音识别技术和听课专注度分析算法,对学生的听课专注度进行评估。AI课堂教学质量评估系统通过收集和分析这些数据,生成教学质量报告,并提供针对…

在线表格技术如何助力企业实现全面预算?

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/前言 在当今快速变化和竞争激烈的商业环境中,企业需要通过精细化的管理手段来确保自身的市场竞争力和持续发展。全面预算管理(Comprehensive Budget Management)作为企业管理的重要组成部分,不仅为企业的…

大数据运维集大成者修行之路

搭建 华为私有云大数据平台 的组件

石油化工领域生产作业流程合规检测

石油化工领域生产作业流程合规检测通过引入AI视觉数据智能分析技术,石油化工领域生产作业流程合规检测对生产作业流程进行实时监测和合规性检测。石油化工领域生产作业流程合规检测利用现场监控摄像头对关键环节、设备和操作进行监测,采集数据并进行实时分析。石油化工领域生…