其实我需要处理像
这样的情况我应该输入rows <n>
“行”和数字<n>
之间或任何单个非数字字符之间应该有空格。
我应该能够分离该字符串部分并将其分配给char变量并将数字部分分配给int ...
然后应该验证字符串部分是否是正确的命令..如果输入错误的命令,如“ada aad 99”或“adaha 9”或“adfad9”..它应该说“其错误的命令”
我尝试使用strtok()
,但它无法处理字符串之间没有NULL
的字符串..我尝试使用$ sscanf(string,"%s %*c %d",str, &num);
但它甚至不适用于所有可能性。
我该怎么做?
答案 0 :(得分:1)
我认为strtok
没有问题,我认为这种情况会很完美。
在伪代码中:
line = getline();
split_line_into_tokens(line);
if tokens[0] == "command1" {
if tokens_num > 2 {
error("to many arguments to command1");
} else if tokens_num < 2 {
error("command1 needs one argument");
} else {
do_command_1(tokens[1]);
}
} else {
error("unknown command");
}
在上面的伪代码中,split_line_into_tokens()
使用strtok
创建令牌数组,使用空格作为分隔符。如果strtok
返回一个空字符串(不是NULL
),则会使用多个空格并跳过该字符串。 split_line_into_tokens
创建tokens
数组,第一个条目包含命令,其余包含参数。变量tokens_num
设置为数组中的标记数。
答案 1 :(得分:0)
我认为strtok()
正是您所需要的。如果您的程序是多线程的,则可能需要使用strtok_r()
。隔离第二个令牌后,您需要使用atoi()
或strtol()
(或其中一个类似函数)将其解析为数字。