我对C ++有点新鲜,很抱歉,如果这个问题很明显,但我遇到了一些障碍。我想要做的是有一个命令提示符,可以执行某些操作。你输入了像timer down 10
这样的简单命令,它会启动计时器倒计时,我做得很好。我检测每个单词的方式是:
string cmd1;
string cmd2;
int cmd3;
cin >> cmd1 >> cmd2 >> cmd3;
工作正常,除了我想要单字命令和这个系统,我真的不能那样做。如果我想要,例如,help
作为一个命令,当我只想输入1个字符串时,它会让我输入2个字符串和一个int。但我希望有特定的命令,可以是完整的2个字符串和一个int或只是1个字符串。
答案 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
}
}
}