首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在控制台应用程序中解析命令

在控制台应用程序中解析命令
EN

Stack Overflow用户
提问于 2015-07-16 20:44:22
回答 2查看 134关注 0票数 0

因此,我的控制台应用程序基于命令,例如,用户可以输入"connect 127.0.0.1“并执行一些操作。我已经能够将命令从参数中分离出来,但是如何使它基于命令字符串调用函数,并使命令与其字符串对应方相匹配呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-16 20:48:10

使用标准解析技术,并从std::cin读取命令

您可能需要为参数向量声明一个类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef std::vector<std::string> vectarg_T;

声明函数处理命令的类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef std::function<void(vectarg_T)> commandprocess_T;

并有一个将命令名与其处理器相关联的映射:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::map<std::string,commandprocess_T> commandmap;

然后在初始化时填充该映射,例如使用匿名函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 commandmap["echo"] = [&](vectarg_T args){ 
    int cnt=0;
    for (auto& curarg: args) { 
      if (cnt++ > 0)   std::cout << ' ';
      std::cout << curarg;
    }
    std::cout << std::endl;
 };

如果您的问题是关于解析程序参数( main),请使用getopt(3)和相关函数。GNU 提供也是argp_parse

考虑,或者 翻译员嵌入到您的程序中,例如嵌入GuileLua。但是嵌入解释器是一个重要的架构设计决策,应该尽早进行。然后,您的应用程序将成为图灵-完全

票数 1
EN

Stack Overflow用户

发布于 2015-07-16 21:12:58

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main(int argc, const char * argv[]) {

    map<string,string> commands;
    cout<<argc<<endl;
    for(int i=1;i<=argc/2;i++)
    {
        string cmd =argv[i*2-1];
        string param =argv[i*2];
        cout<<cmd<<endl;
    }
    string ip = commands["connect"];
    cout<<"are you want to connect "<<ip<<" ?";
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31468520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文