多字命令C ++

时间:2017-10-07 03:58:57

标签: c++

我对C ++有点新鲜,很抱歉,如果这个问题很明显,但我遇到了一些障碍。我想要做的是有一个命令提示符,可以执行某些操作。你输入了像timer down 10这样的简单命令,它会启动计时器倒计时,我做得很好。我检测每个单词的方式是:

string cmd1;
string cmd2;
int cmd3;
cin >> cmd1 >> cmd2 >> cmd3;

工作正常,除了我想要单字命令和这个系统,我真的不能那样做。如果我想要,例如,help作为一个命令,当我只想输入1个字符串时,它会让我输入2个字符串和一个int。但我希望有特定的命令,可以是完整的2个字符串和一个int或只是1个字符串。

3 个答案:

答案 0 :(得分:0)

您需要使用getline读取命令,然后将其拆分为令牌。检查getline功能,并将分割线google转换为令牌c ++

答案 1 :(得分:0)

使用getline将整个命令存储在单个String中。

String command;
std::getline (std::cin,command);

现在,您可以使用以下代码将命令拆分为令牌字。

int counter =0;
string words[10];
for (int i = 0; i<command.length(); i++){
    if (command[i] == ' ')
        counter++;
    else
        words[counter] += command[i];
}

答案 2 :(得分:0)

您可以逐行读取输入,然后将每行拆分为包含每个命令的std::vector,后跟其参数:

void command_help()
{
    // display help
}

void command_timer(std::string const& ctrl, std::string const& time)
{
    int t = std::stoi(time);

    // ... etc ...
}

int main()
{
    // read the input one line at a time
    for(std::string line; std::getline(std::cin, line);)
    {
        // convert each input line into a stream
        std::istringstream iss(line);

        std::vector<std::string> args;

        // read each item from the stream into a vector
        for(std::string arg; iss >> arg;)
            args.push_back(arg);

        // ignore blank lines
        if(args.empty())
            continue;

        // Now your vector contains

        args[0]; // the command
        args[1]; // first argument
        args[2]; // second argument
        // ...
        args[n]; // nth argument

        // so you could use it like this

        if(args[0] == "help")
            command_help(); // no arguments
        else if(args[0] == "timer")
        {
            if(args.size() != 3)
                throw std::runtime_error("wrong number of arguments to command: " + args[0]);

            command_timer(args[1], args[2]); // takes two arguments
        }
    }
}