【问题标题】:How to extract substring in C如何在C中提取子字符串
【发布时间】:2012-12-01 21:56:50
【问题描述】:

我正在从文件中读取数据,我只需要从以下数据中提取整数。我该如何完成?谢谢。

我的输入将是 field6,我需要删除这些字符“];”并将其存储在整数变量中。

我的代码:-

field6 = strtok(NULL," ");
if (isdigit(field6))
{
   weight = atoi (field6);
   printf("%d\n",weight);
}

输入:

43];
2];
4];
16];
25];

输出:

43
2
4
16
25

【问题讨论】:

  • 谷歌isdigit()<ctype.h>
  • scanf 函数之一的完美任务。
  • @H2CO3 但我的输入是一个字符串。
  • @SOaddict 但是你可以通过取消引用来使它成为一个字符......你知道,指针:)
  • @Troy “逐个字符地解析它是很多不必要的工作” 取决于您在输入错误时想要什么行为。 scanf 系列函数提供非常有限的错误管理选择,更不用说在某些情况下的特殊行为了。它们总是很诱人,但并不总是一个好主意。

标签: c file substring


【解决方案1】:

试试

field6 = strtok(NULL,"\n");
weight = atoi (field6);
printf("%d\n",weight);

这是 atoi 完全按照您的需要执行的罕见情况之一。

无法检测到的错误条件是“];”那将被解释为零。

【讨论】:

    【解决方案2】:

    没有 sscanf 那么:

    #include <stdio.h>
    
    int main(int argc, char** argv)
    {
      const char *test = "123];";
    
      int i = 0;
    
      const char *p = test;
      while (*p && isdigit(*p))
      {
        if (p != test) i *= 10;
        i += *p - '0';
        ++p;
      }
    
      if (*p != ']')
      {
        // we have an error!
        return 1;
      }
    
      printf("%i\n", i);
    }
    

    【讨论】:

    • +1 for almost 甚至不需要 libc ... isdigit 可能是 *p&gt;='0' &amp;&amp; *p&lt;='9' ... 不算 printf 因为那只是为了演示
    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 2011-01-19
    • 2018-09-29
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多