201403-3 命令行选项

2024-04-16 07:28
文章标签 命令行 选项 201403

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

100分

#include <bits/stdc++.h>
using namespace std;int main()
{string line;cin >> line;map<char, bool> dct; // true:带参数 false:不带参数for (int i = 0; i < line.size(); i++){if (line[i] != ':'){dct.insert(pair<char, bool>(line[i], false));}else{dct[line[i - 1]] = true;}}int n;cin >> n;cin.ignore(); // 忽略回车string s;map<string, string> res;for (int i = 0; i < n; i++){res.clear();string temp; // 指令getline(cin,s);stringstream ss(s);ss >> temp;while (ss >> temp){if (temp[0] == '-' && dct.find(temp[1]) != dct.end()){ // 合法字母if (dct[temp[1]]){ // 带参数string arg;if (ss >> arg){if (res.find(temp) != res.end()){ // 命令选项存在res[temp] = arg;}else{ // 数据不存在res.insert(pair<string, string>(temp, arg));}}elsebreak;}else{ // 不带参数res.insert(pair<string, string>(temp, ""));}}else // 不合法break;}cout << "Case " << i + 1 << ": ";map<string, string>::iterator it;for (it = res.begin(); it != res.end(); it++){cout << it->first << " ";if (it->second != ""){cout << it->second << " ";}}cout << endl;}return 0;
}

一些解释
        stringstream ss(s);
        ss>>temp;
在这段代码中,第一个从stringstream中提取的字符串会被存储在变量temp中,该单词会包含所有不包含空格的字符,不包括空格本身。一次提取的单词是以空格为分隔符的连续字符序列,因此,如果读取到的字符串是"Hello World",那么temp将存储"Hello"。如果要读取下一个单词,只需再次使用ss>>temp代码即可。这会将下一个单词读取到temp中,以此类推。
参考链接:https://blog.csdn.net/qq_45727086/article/details/129467289

30分(待修改)

#include <bits/stdc++.h>
using namespace std;
string cinn;
struct xx
{char a;bool flag = false; // 0:无参数 1有参数string canshu;     // 小写字母+数字+减号
} x[300];
map<char, bool> f; // 字母,是否带参数
bool cmp(string a, string b)
{if (a[1] < b[1])return true;return false;
}
int main()
{cin >> cinn;int k = 0; // 0开始for (int i = 0; i < cinn.size(); i++){if (cinn[i] == ':'){x[k - 1].flag = 1;}else{x[k].a = cinn[i];k++;}}for (int i = 0; i < k; i++){f.insert(make_pair(x[i].a, x[i].flag)); // 存命令行里合法的选项}int n;cin >> n;vector<string> v;int uu = 1;while (n--){v.clear();string l;string a;cin >> a;getline(cin, l); // getline(cin,str);有时会读取上一行的"\n"// getline(cin,str)的读取原理是将以‘/n’为结束符做为一完整读取的一行,'/n'会读。// 所以在getline前面加入cin.ignore()或者读入的数忽略,这个就会忽略那个回车int flag = 0;for (int i = 0; i < l.size(); i++){if (flag == 0 && l[i] == ' ') // 找到第一个空格,这个空格前面的不读{flag = 1;if (i == l.size() - 1) // 如果后面没东西,直接break后输出Case x:{v.push_back("");break;}}else if (flag == 1) // 开始保存合法的选项以及合法的参数{int ii = i + 1;if (l[i] == '-' && f.find(l[ii]) != f.end()) // 第一个为'-'并且字母合法{if (f[l[ii]] == 0){ // 无参数,只存合法命令// 合法命令为'-'+一个小写字母if (l[i] != '-') //'-'break;i++;string y;y += "-";if (l[i] >= 'a' && l[i] <= 'z') // 小写字母{y += l[i];i++;}elsebreak;v.push_back(y);}else if (f[l[ii]] == 1){                    // 有参数,只存合法命令+合法参数if (l[i] != '-') //'-'break;i++;string y;y += "-";if (l[i] >= 'a' && l[i] <= 'z') // 命令: 小写字母{y += l[i];i++;}elsebreak;i++;y += " ";int fl = 0;while (l[i] != ' ' && i < l.size()) // 参数{if ((l[i] >= 'a' && l[i] <= 'z') || (l[i] >= '0' && l[i] <= '9') || l[i] == '-'){y += l[i];i++;}else{fl = 1;break;}}if (fl == 1){break;}v.push_back(y);}}elsebreak;}}sort(v.begin(), v.end(), cmp);v.erase(unique(v.begin(), v.end()), v.end());cout << "Case " << uu << ": ";for (int i = 0; i < v.size(); i++){if (v[i][1] == v[i + 1][1] && i + 1 < v.size()){v.erase(v.begin() + i);}}for (auto t : v){cout << t << " ";}cout << endl;uu++;}
}

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



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

相关文章

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

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

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.暂停和取消暂停实例

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 )转换成计算机可以运行的可执行程序 编译器会检查代码的语法和语义,生成相应

查看Excel 中的 Visual Basic 代码,要先设置excel选项

1. excel VB的简单介绍 百度安全验证 2.excel选项设置 excel表格中在选项->自定义功能区域,选择开发工具,visual baisc/查看代码,即可看到代码。 3.excel已经设置,可以直接查看

ffmpeg使用安装使用教程(命令行-Python)

安装教程 https://blog.csdn.net/yuanmomoya/article/details/141992114 ffmpeg转换操作视频十分的占用cpu,会把cpu打满,线上使用的话需要注意下 命令行操作 一、视频转码 将视频从一种格式转换为另一种格式: ffmpeg -i input_video.mp4 output_video.avi 这将把输入的 MP4

proe5.0 config.pro 选项清理垃圾关系

proe5.0 config.pro 选项:  cleanup_drawing_dependencies YES_CS_NOT_REQUIRED c leanup_layout_dependencies YES_CS_NOT_REQUIRED 可以清理所有不应该存在的依赖关系 在某些情况下,图纸、布局和模型可能包含对模型的不需要的默认、幽灵、无效、旧的或遗留引用或者垃圾引用,如何删除这些引用?

mac命令行启动tomcat 修改tomcat端口号

1、进入的Tomcat安装/bin 目录下 直接拖动bin文件夹到终端,前面加cd 即:cd / Library / Tomcat / bin  2、启动tomcat 输入:sudo sh ./startup.sh 3、关闭Tomcat 关闭:sudo sh ./shutdown.sh   4、修改tomcat端口号 安装目录/conf/server.xml 文件夹下