C++实现,简单的命令行交互框架

目录


背景

在实际开发中,经常需要有对端测试程序,配合自己的程序,验证功能、逻辑等。面对繁杂、多变的需求,如果对端程序设计得不够灵活,则无法提升工作效率,如果能够与对端程序交互,通过命令行输入命令的方式完成测试验证,将大大提升工作效率,下面的示例程序是一个简单的命令行交互框架,各位小伙伴可以根据自己的需求添加命令即可,如果对你有帮助,请点赞、收藏,谢谢!

c++ 复制代码
#include <iostream>  
#include <string>  
#include <vector>  
#include <sstream>  
  
/* 假设的命令处理函数 */  
void commandHelp() {  
    std::cout << "Available commands:\n"  
              << "  help - Display this help message\n"  
              << "  echo <arg> - Echo the argument back to you\n"  
              << "  quit - Exit the program\n";  
}  
  
void commandEcho(const std::string& arg) {  
    std::cout << "Echo: " << arg << std::endl;  
}  
  
/* 主命令处理函数 */  
void processCommand(const std::string& command, const std::vector<std::string>& args) {  
    if (command == "help") {  
        commandHelp();  
    } else if (command == "echo") {  
        if (args.empty()) {  
            std::cout << "Error: 'echo' requires an argument\n";  
        } else {  
            commandEcho(args[0]);  
        }  
    } else if (command == "quit") {  
        std::cout << "Exiting the program...\n";  
        exit(0);  
    } else {  
        std::cout << "Unknown command: " << command << std::endl;  
    }  
}  
  
/* 解析命令行参数 */ 
std::vector<std::string> parseArguments(const std::string& line) {  
    std::istringstream iss(line);  
    std::string token;  
    std::vector<std::string> args;  
    while (std::getline(iss, token, ' ')) {  
        if (!token.empty()) {  
            args.push_back(token);  
        }  
    }  
    return args;  
}  
  
int main() {  
    std::string commandLine;  
    while (true) {  
        std::cout << "> ";  
        std::getline(std::cin, commandLine);  
  
        if (commandLine.empty()) {  
            continue;  
        }  
  
        std::vector<std::string> args = parseArguments(commandLine);  
        if (args.empty()) {  
            continue;  
        }  
  
        std::string command = args[0];  
        args.erase(args.begin()); /* 移除命令本身,只保留参数 */  
  
        processCommand(command, args);  
    }  
  
    return 0; /* 这行代码实际上永远不会被执行,因为我们在'quit'命令中调用了exit() */  
}
相关推荐
陈文锦丫2 小时前
MQ的学习
java·开发语言
liwulin05062 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
神仙别闹3 小时前
基于QT(C++)实现学本科教务系统(URP系统)
数据库·c++·qt
青蛙大侠公主3 小时前
Thread及其相关类
java·开发语言
爱吃大芒果3 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode
云栖梦泽3 小时前
易语言数据库操作:结构化数据管理的核心
开发语言
deng-c-f3 小时前
Linux C/C++ 学习日记(49):线程池
c++·学习·线程池
电子硬件笔记3 小时前
Python语言编程导论第七章 数据结构
开发语言·数据结构·python
南棱笑笑生3 小时前
20251217给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后调通ov5645【只能预览】
linux·c语言·开发语言·rockchip
ulias2123 小时前
C++ 的容器适配器——从stack/queue看
开发语言·c++