【ccf-csp题解】第1次csp认证-第三题-命令行选项-题解

news/2024/10/29 7:14:54/

题目描述

思路讲解

本题是一个简单的字符串模拟题,这种题目是csp认证第三题的常客

大致思路是用两个bool数组记录某一个选项(0--25下标对应小写字母a--z),第一个数组中无参选项为true,第二个数组中有参选项为true,比如说假如st1[0]==false&&st2[0]==false,意思是下面的命令中不能出现-a的选项(包括有参和无参)

对于每一个命令,首先进行字符串的分割,分割方式推荐使用stringstream技术,具体看下面的文章:

stringstream基础使用(类型转换、分割字符串)

分割之后遍历每一个连续字符串,排除不合法情况,把有参的选项的参数找到并记录,最后统一输出即可,详细看下面的代码和注释

满分代码和注释

#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
const int N=30;
bool st1[N];//无参记录 
bool st2[N];//有参记录
string ans[N];//每一个选项对应的参数
int main()
{string str;cin>>str;for(int i=0;i<str.length();i++)//预处理bool数组 if(i+1<str.length()&&str[i+1]==':')st2[str[i]-'a']=true,i++;else st1[str[i]-'a']=true;  int n;cin>>n;getchar();//吸收回车,因为下面有getline for(int i=1;i<=n;i++){	getline(cin,str);printf("Case %d:",i);vector<string>sp;stringstream ss(str);while(ss>>str)sp.push_back(str);//分割字符串至vector中 for(int j=0;j<26;j++)ans[j].clear();//清空每一个样例的答案 for(int j=1;j<sp.size();j++){if(sp[j][0]!='-'||sp[j][1]<'a'||sp[j].length()!=2)break;//不符合选项的要求//sp[j][1]<'a'意思是第二位不是小写字母,因为数字和减号的ASCII码值均小于'a'int k=sp[j][1]-'a';if(st1[k])ans[k]='#';//随便的值,只要长度大于0就可以与没出现过的选项区分else if(st2[k]&&j+1<sp.size())j++,ans[k]=sp[j];else break; }for(int j=0;j<26;j++){if(ans[j].size()){cout<<" -"<<(char)(j+'a');if(st2[j])cout<<" "<<ans[j];}}cout<<endl;}return 0;
} 


http://www.ppmy.cn/news/1094885.html

相关文章

【牛客刷题】bfs和dfs (二叉树层序遍历、矩阵最长递增路径、被围绕的区域)

二叉树层序遍历 vector<vector<int> > levelOrder(TreeNode* root) {// write code herevector<int> res;vector<vector<int>> result;if (root nullptr) return result;queue<TreeNode*> que;que.push(root);while (!que.empty()) {int …

STM32-DMA

1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;,中文名为直接内存访问&#xff0c;它是一些计算机总线架构提供的功能&#xff0c;能使数据从附加设备&#xff08;如磁盘驱动器&#xff09;直接发送到计算机主板的内存上。对应嵌入式处理器来说&#xff0c;DMA可…

【0907 C高级day2】Shell脚本

一、作业&#xff1a;写一个shell脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件&#xff0c;dir在dir下创建dir1和dir2把当前目录下的所有文件拷贝到dir1中&#xff0c;把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz再把dir2.tar.xz移…

it设备综合监控系统

IT综合监控系统是一系列IT管理产品的总称&#xff0c;具有功能齐全、应用便捷、解决方案齐全的产品&#xff0c;可一站式服务满足消费者的各种IT管理需求。该产品涵盖网络管理、服务器管理、存储系统、安全管理等方面&#xff0c;可为企业提供对整个IT系统的全方位监控和管理。…

C++QT day2

作业 1> 封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员函数&…

PMP证书续费是否真的有必要呢?(内附续证流程)

PMP项目管理专业人士资格认证是由项目管理协会&#xff08;Project Management Institute&#xff0c;简称PMI&#xff09;发起的。PMP作为世界级的项目管理认证证书&#xff0c;拥有着先进的项目管理知识体系&#xff0c;它严格评估项目管理人员知识技能是否具有高品质的资格认…

浅谈Spring

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器&#xff08;框架&#xff09;。 一、什么是IOC&#xff1f; IoC Inversion of Control 翻译成中⽂是“控制反转”的意思&#xff0c;也就是说 Spring 是⼀个“控制反转”的容器。 1.1控制反转推导 这个控制反转怎…

【linux命令讲解大全】073.“Linux文件搜索工具:bzgrep和egrep的使用方法“

文章目录 bzgrep补充说明语法参数 egrep补充说明语法实例 从零学 python bzgrep 使用正则表达式搜索.bz2压缩包中的文件。 补充说明 bzgrep命令用于在.bz2压缩包中搜索符合正则表达式的内容&#xff0c;并将匹配的行输出到标准输出。 语法 bzgrep <pattern> <bz2…