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

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

时间:2024-10-24 08:52:10浏览次数:1  
标签: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*类型的字符串

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

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

相关文章

  • Linux 的系统信息命令
    Author:ACatSmilingSince:2024-10-22操作系统信息:方式一:uname-a。uname是"UnixName"的缩写,这个命令主要用于打印与系统相关的信息,-a是uname命令的一个选项,这个选项的作用是让uname打印出所有的系统信息,如果不使用-a选项,uname只会打印部分信息。输出结果......
  • 常用的Linux awk 命令
    对文件拆分,获取指定内容例:http:****startDate=20241023&endDate=20241023获取startDate对应参数的内容awk-F'startDate=|endDate''{print$2}'如果需要获取符合条件的整行,将$2改为$0,$0表示获取原始数据对数据进行分组统计例:http:****startDate=20241023&endDate=20241023......
  • 【磐维数据库】3.0运行"show events;"命令,引发集群主节点CoreDump
    一、环境介绍数据库PanWeiDBV2.0-S3.0.0_B01架构Intel+x86_64操作系统BCLinux-for-Euler-21.10内核4.19.90-2107.6.0.0192.8.oe1.bclinux.x86_64二、故障场景1、客户环境可以稳定复现gsql-rshowevents;\cbomcdb;--------业务库名称sh......
  • Linux常用命令(自用记录)
    CentOS添加用户useradd-d/home/testuser-mtestuserpasswdtestuserroot修改/etc/sudoers文件AllowroottorunanycommandsanywhereusernameALL=(ALL)ALL切换ROOT权限suexit退出root文件目录相关操作cd/切换到根目录cd/home切换到根目录下的......
  • Conda常用命令记录(自用记录)
    1.conda创建环境condacreate--namenamepython=3.62.激活环境condaactivatename3.查看所有环境condainfo--envs4.查看当前环境下已经安装的包condalist5.删除环境condaremove--namename--all6.查看当前channelcondaconfig--show7.添加清华源condacon......
  • git命令推送github标签
    如果你在修改了代码后想要在GitHub上创建新标签,你可以遵循以下步骤。这些步骤结合了代码的提交、标签的创建以及将标签推送到GitHub远程仓库的过程。步骤一:提交修改后的代码添加修改到暂存区:使用gitadd命令将你修改过的文件添加到Git的暂存区。例如,如果你修改了所有文件,可以......
  • 【日常记录】gsi system.img 解包
    参考:https://www.cnblogs.com/fanglongxiang/p/13706562.html查看文件类型:android/out/host/linux-x86/bin$file~/tmp/androidt/system.img/home/huaweishi/tmp/androidt/system.img:Linuxrev1.0ext2filesystemdata,UUID=f2face5f-ed9a-59e5-b456-aa5e9dae14d0(ex......
  • HCI_LE_Read_Local_Supported_Features(0x0003)命令全面解析
    目录一、命令概述 二、命令格式2.1.HCI_LE_Read_Local_Supported_Features命令格式2.1.HCICommandComplete响应命令格式三、返回命令 HCICommandComplete参数说明3.1. Status3.2.LE_Features3.3.示例3.4.LE_Features字段中的特性位四、命令执行流程4.1.......
  • HCI_LE_Set_Random_Address(0x0005)命令全面解析
    目录一、命令概述二、命令格式2.1.HCI_LE_Set_Random_Address命令格式2.2.HCICommandComplete返回命令格式2.3.格式示例2.4.示例二进制表示三、命令参数详细说明3.1.命令代码(Opcode)3.2.参数长度(ParameterLength)3.3.随机地址(RandomAddress)四、命令返回参......
  • Playwright 源码 启动 Chromium 的命令
    问:Playwright无声无息地启动了Chromium,到底底层执行了个啥子?带着问题,开启探险之旅!!!......