首页 > 编程语言 >【子项目:命令系统(Command System)】C++自制命令系统( 开发ing | 踩坑记录 )

【子项目:命令系统(Command System)】C++自制命令系统( 开发ing | 踩坑记录 )

时间:2024-10-15 09:49:01浏览次数:6  
标签:std string strtok cmd System 命令 子项目 using include

项目背景

在某一项目中,遇到了需要自制命令系统的需求,而这个模块的复用性很高,因此单独拉出来做一个子项目

更新日志

[2024.10.15 - 10:00] 增


项目进度

----[ 2024.10.15 10:00 ]----

  • 首先实现最基础的输入输出功能,用std::getline读入行再分割成字符串数组

- main.cpp

#include <iostream>
#include <windows.h>
#include <vector>
#include <string>
#include <cstring>    //for std::strtok
#include "cmd_sys.h"

//using namespace std;    //byte冲突,在后续项目中要用到
//封装成模块时,应删掉所有下面的using,避免冲突
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

void mainloop(void) {
    string full_cmd;
    string cmd;
    char* arg_;    //个人习惯使用"<变量名>_"作为临时变量名
    vector<string> args;
    while(1) {
        cout << "> ";
        std::getline(cin, full_cmd);

        cmd = std::strtok(full_cmd.data(), " ");
        arg_ = std::strtok(NULL, " ");
        while (arg_!=NULL) {
            args.push_back(arg_);
            arg_ = strtok(NULL, " ");
        }

        for (int i=0; i<args.size(); ++i) {
            cout << args[i] << endl;
        } //debug
        if (cmd_dict.find(cmd)!=cmd_dict.end()) { 
            (cmd_dict.at(cmd))(args);
        }
    }
}

int main(void) {
    SetConsoleOutputCP(65001);  //中文输出
    cout << "命令系统 - Command System" << endl << "By: SoliCoder" << endl << endl;
    mainloop();
    return 0;
}

坑点1:用C++的std::strtok实现python中的split功能

  • std::getline需要full_cmd为std::string类型
    但std::strtok要分割的字符串却必须是char*类型
    又不能直接强转,查了半天查到可以调用std::string对象的data方法获取char*类型的字符串

@SoliCoder: (string和char*要不你俩打一架吧,为啥string库内部的函数也不能统一成string啊)

标签:std,string,strtok,cmd,System,命令,子项目,using,include
From: https://www.cnblogs.com/Solicoder/p/-/command-system

相关文章

  • bbed修复system文件头损坏
    转自:https://www.cnblogs.com/yhq1314/p/10870998.html1启动数据库,查看trace,在mount到openSQL>startupmount;ORACLEinstancestarted.TotalSystemGlobalArea784998400bytesFixedSize2257352bytesVariableSize511708728bytesDatabas......
  • IDEA如何用maven打包(界面和命令两种方式)
    前言我们在使用IDEA开发时,如果是springboot项目的话,一般是用maven来管理我们的依赖的。然后,当我们开发完成之后,就需要打包部署了。 那么,我们应该如何打包呢?如何打包(jar包)首先,我们点击右侧的maven侧边栏,然后点击里面的【clean】,先将以前的包清理掉。然后,我们等待clean完成......
  • 欧拉openEuler、Linux系统-(9) 文件操作命令集
    (请关注,本文将不断更新...,添加实用技巧和操作实例)在Linux系统中,熟练掌握各种文件操作命令是非常重要的。下面为大家详细介绍50个Linux系统中常用的文件操作命令。一、文件查看类命令1.lsls命令用于列出目录内容。用法:ls[选项][目录或文件]选项解释:-l:以长格式显示......
  • UE-GAS CreateDefaultSubobject<UAbilitySystemComponent>返回为nullptr
    前因原先在项目中用了默认的ASC(UAbilitySystemComponent),后面因为新的需求导致需要改为自己的ASC。结果改了之后,发现在Pre-Init(构造函数)时,CreateDefaultSubobject的返回值是nullptr。过程于是去论坛求助:论坛的人的回答是,你修改了ASC的类,导致前一个ASC反序列化到当前ASC上,从而......
  • Git命令学习--杂项
    目录前言一、本地栈式提交二、提交的技巧1.提交的技巧#12.提交的技巧#2三、GitTags四、GitDescribe五、复杂情况1.多分支rebase2.选择parent提交记录3.纠缠不清的分支总结前言一些Git技术、技巧与贴士大合集......
  • Linux常用命令(每日两更)
     一、Linux基础命令1、bc数字计算器作用:用于数字计算以及进制转换#安装bc工具[root@192~]#yum-yinstallbc>/dev/null;echo-e"\a"​#bc用于数字计算[root@192~]#echo"1+1"|bc2​#bc用于进制转换obase表示输出的进制,ibase表示输入的进制[root@19......
  • 逍遥安卓模拟器命令行合集(memuc命令)
    逍遥安卓模拟器命令行合集(memuc命令)用cmd自行测试模拟器配合工具:memuc是v6.0.0版本推出的命令行工具,它封装了MEmuConsole、MEmu、MEmuManage的接口,支持多开管理、修改配置、android通信、adb命令等功能。memuc支持多个模拟器的管理,所以某些命令需要传入模拟器序号或者模......
  • OSS 使用ossutil工具通过命令行上传大于5G的文件
    一、简介对象存储OSS支持通过多种方式上传文件。对于大文件(超过5GB的文件),可能存在上传失败或者上传慢的情况。此时您可以通过分片上传、断点续传、ossbrowser工具、ossutil工具等多种方式上传大文件。二、ossbrowser工具下载以及使用1.ossbrowser工具下载地址及使用方法#下载安装......
  • Linux系统之ipcalc命令的基本使用
    (Linux系统之ipcalc命令的基本使用)一、ipcalc命令介绍ipcalc命令是一个用于计算和显示IP地址和子网掩码相关信息的工具。它可以帮助用户快速计算出IP地址、子网掩码、网络地址、广播地址等信息。二、ipcalc命令的使用帮助2.1ipcalc命令的help帮助信息使用--help,查询ipca......
  • Linux从入门到精通-第二章(Linux的基础命令)
    文章目录前言一、linux的目录结构和命令基础1:linux的目录结构2:linux基础命令a:命令基础格式二、基础命令(上)1.ls命令2:cd命令和pwd命令a:切换目录命令cdb:pwd命令4:相对路径绝对路径和特殊路径5:mkdir命令三:基础命令(下)1:touch,cat,more命令a:touch命令b:cat命令c:more命......