【问题标题】:how to separate a number from a string [closed]如何从字符串中分离数字[关闭]
【发布时间】:2011-11-05 13:11:09
【问题描述】:

其实我需要处理这样的情况

我应该输入rows <n> 'rows' 和数字 <n> 或任何单个非数字字符之间应该有空格。

我应该能够分离该字符串部分并将其分配给 char 变量和数字部分分配给 int...

然后应该验证字符串部分是否是正确的命令。如果输入了错误的命令,如“ada aad 99”或“adaha 9”或“adfad9”。它应该说“它的错误命令” .

我尝试使用strtok(),但它无法处理字符串之间没有NULL 的字符串。我尝试使用$sscanf(string,"%s %*c %d",str, &num); 但它甚至不适用于所有可能性。

我该怎么做?

【问题讨论】:

  • 你的个人资料说编程很疯狂,但你在实践中对此很懒惰。基本上,你只是要求我们为你编写一个程序。好吧,如果没有任何内置函数可以为您完成这项工作,您为什么不尝试为它编写自己的代码?
  • 嗯,答案是“寻找空间”。找到空格后,您就知道单词应该在它的左边,而数字应该在右边。

标签: c string


【解决方案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 创建一个 tokens 数组,使用空格作为分隔符。如果strtok 返回一个空字符串(不是NULL),那么使用的空格不止一个,你可以跳过它。 split_line_into_tokens 创建 tokens 数组,第一个条目包含命令,其余条目包含参数。变量tokens_num 设置为数组中的标记数。

【讨论】:

    【解决方案2】:

    我认为strtok() 正是您所需要的。如果您的程序是多线程的,您可能需要使用strtok_r()。隔离第二个令牌后,您需要使用atoi()strtol()(或类似函数之一)将其解析为数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多