⭐CSP 201403-3命令行选项

2024-02-27 12:58
文章标签 csp 命令行 选项 201403

本文主要是介绍⭐CSP 201403-3命令行选项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一开始这样写的,但是是错误的,只有20分

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<stdio.h>
#include<string>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<limits>
using namespace std;
//命令行选项
const int maxn = 280;//最多256个命令
int hashtable[256];
char str[maxn];//每一个命令行
string temp;
string nonop;//无参数选项
string op;//带参数选项
char a[maxn][maxn];
struct Output {char op;char out[maxn];
}output[maxn];
bool cmp(Output a, Output b) {return a.op < a.op;
}int main()
{scanf("%s", str);int i;for (i = strlen(str); i >= 0; i--){if (str[i] == ':')op.insert(op.end(), str[--i]);else{nonop.insert(nonop.end(), str[i]);}}int n;scanf("%d", &n);for (int i = 1; i <= n; i++){int num = 0;int outnum = 0;fill(hashtable, hashtable + maxn, 0);getchar();		gets(str);		//puts(str);		int j = 0;//printf("len=%d", strlen(str));for (; j < strlen(str); j++){if (str[j] == ' '){break;}}//printf("j=%d\n", j);for (; j < strlen(str);){if (str[j] == ' ' && str[j + 1] == '-')//如果遇到了选项{				j++;//每一个空格之后的位置;				if (nonop.find(str[j + 1])!=string::npos)//如果是无参数选项{//printf("找到了无参数选项");if (hashtable[str[j + 1]] == 0){hashtable[str[j + 1]] = 1;output[num].out[0] = str[j];output[num].out[1] = str[j + 1];output[num].op = str[j + 1];num++;}j = j + 2;}else if (op.find(str[j + 1]) != string::npos)//如果是有参数选项{//printf("有参数!\n");int k;if (hashtable[str[j + 1]] == 0){hashtable[str[j + 1]] = 1;output[num].out[0] = str[j];output[num].out[1] = str[j + 1];output[num].op = str[j + 1];k = num;}else{for (k = 0; k < num; k++){if (output[k].op == str[j + 1])//如果op等于j+1break;}}j = j + 2;outnum = 0;					do {a[output[k].op][outnum++] = str[j];j++;} while (str[j] != ' ');					num++;					}else{break;}}else//如果遇到了非法的字符串{break;}}sort(output, output + num, cmp);printf("Case %d: ", i);for (int j = 0; j < num; j++){printf("%s", output[j].out);if (op.find(output[j].out[1]) != string::npos)printf("%s",a[output[j].out[1]]);if (j != num - 1)printf(" ");}printf("\n");}return 0;
}

启发:
getline来输入,需要表明头文件#include
另外将每一行根据空格分开后单独存在vector v中

for (int t = line.find(" "); t != -1; t = line.find(" ")) //将每一行根据空格分开以后存储在vector中 {v.push_back(line.substr(0, t));line = line.substr(t + 1);}v.push_back(line);

完整代码:
不得不说stl真的好,可是我用不熟练ww!总是会出错。

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstring>
#include <map> 
#include <vector>
#include<string>
using namespace std;
/*检查选项是否合法 ,并且是否是带参数的
*/
void isIn(string s, char a, bool flag[])
{for (int i = 0; i < s.length(); i++){if (a == s[i]){flag[0] = true;if (s[i + 1] == ':') flag[1] = true;break;}}
}
int main()
{string s, s2;cin >> s;int n;cin >> n;map <char, string> m; //记得清零 getline(cin, s2);vector <string> v;bool flag[2];  //初始化为false for (int i = 0; i < n; i++){memset(flag, false, sizeof(flag));m.clear();v.clear();string s1;string line;getline(cin, s1);line = s1;for (int t = line.find(" "); t != -1; t = line.find(" ")) //将每一行根据空格分开以后存储在vector中 {v.push_back(line.substr(0, t));line = line.substr(t + 1);}v.push_back(line);/*对vector中的每一个数据进行检查,不合法直接break若为合法数据,则将他与“!”装进map中若为带参数,  则更新“!”为参数放进map中*/vector<string> ::iterator it;for (it = v.begin() + 1; it != v.end(); it++)//是begin+1是因为不能计算命令{memset(flag, false, sizeof(flag));string ss = *it;if (ss[0] != '-' || ss.length() != 2) break;//如果不是命令,直接breakisIn(s, ss[1], flag);if (flag[0]){m.insert(pair <char, string>(ss[1], "!"));//		    	   	   cout<<"insert :"<<ss[1]<<endl;if (flag[1] && it + 1 != v.end()) //不加这个只有90分{it += 1;string paramter = *it;m[ss[1]] = paramter;//		    	   	      	 cout<<m[ss[1]]<<endl;}}else break;}cout << "Case " << i + 1 << ":";map <char, string> ::iterator iter;for (iter = m.begin(); iter != m.end(); iter++){if (iter->second == "!") cout << " -" << iter->first;else cout << " -" << iter->first << " " << iter->second;}cout << endl;}
}

这篇关于⭐CSP 201403-3命令行选项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752463

相关文章

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

OpenStack:Glance共享与上传、Nova操作选项解释、Cinder操作技巧

目录 Glance member task Nova lock shelve rescue Cinder manage local-attach transfer backup-export 总结 原作者:int32bit,参考内容 从2013年开始折腾OpenStack也有好几年的时间了。在使用过程中,我发现有很多很有用的操作,但是却很少被提及。这里我暂不直接

OpenStack实例操作选项解释:启动和停止instance实例

关于启动和停止OpenStack实例 如果你想要启动和停止OpenStack实例时,有四种方法可以考虑。 管理员可以暂停、挂起、搁置、停止OpenStack 的计算实例。但是这些方法之间有什么不同之处? 目录 关于启动和停止OpenStack实例1.暂停和取消暂停实例2.挂起和恢复实例3.搁置(废弃)实例和取消废弃实例4.停止(删除)实例 1.暂停和取消暂停实例

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

CSP-J基础之cmath常见函数

文章目录 前言1. **`sin` 函数**2. **`cos` 函数**3. **`exp` 函数**4. **`log` 函数**5. **`fabs` 函数**6. **`pow` 函数**7. **`sqrt` 函数**8. **`ceil` 函数**9. **`floor` 函数** 总结 前言 在计算机科学与编程中,数学函数是解决各种计算问题的基础工具。C++标准

C++入门(05-2)从命令行执行C++编译器_GCC

文章目录 GCC编译器1. 下载MinGW-w64,安装(不推荐)2. 使用MSYS2安装MinGW-w64(推荐)2.1 安装MSYS22.2 初始化和更新2.3 安装MinGW-w64编译器2.3 在MSYS2 Shell中导航到代码目录2.4 使用 g++ 编译2.5 运行可执行文件 GCC编译器 GCC(GNU Compiler Collection)是一个开源编译器集

C++入门(05)从命令行执行C++编译器_MSVC

文章目录 1.C++ 编译器2. 常用 C++ 编译器MSVC(Microsoft Visual C++)GCC(GNU Compiler Collection)Clang 3. MSVC 编译器3.1 开发者命令提示符3.2 编译 C++ 代码 1.C++ 编译器 将C++源代码(扩展名为 .cpp )转换成计算机可以运行的可执行程序 编译器会检查代码的语法和语义,生成相应

CSP-J选择题 - 排列组合

排列问题:有5名学生参加比赛,要求排成一排拍照,有多少种不同的排列方式?组合问题:从10本书中选出3本书送给朋友,有多少种不同的选择方式?排列问题:一个教室有7个座位,5个学生需要坐下,有多少种不同的排列方式?组合问题:从12个人中选出4个人组成一个团队,有多少种不同的方式?排列问题:一个密码由4个字母组成,字母可以重复使用,有多少种不同的排列组合?组合问题:从8个不同颜色的球中选出3个,不考虑顺