【问题标题】:String of variable length to int array?可变长度的字符串到int数组?
【发布时间】:2011-10-20 19:00:39
【问题描述】:

我有一个字符串,格式为 “1 2 8 4 9 0”等。我知道它会遵循整数、空格、整数的格式...

但是,我不能保证长度。我知道最大长度,如果有帮助的话。 我想使用 sscanf,但它需要有限数量的整数。

关于如何将“1 2 3”转换为数组的任何想法

A[0] = 1

A[1] = 2

A[2] = 3

谢谢!

【问题讨论】:

    标签: c arrays string parsing


    【解决方案1】:

    strtol 表示在字符串中失败的位置。
    对于像"1 2 3 ..." 这样的字符串,它将读取1,然后立即失败;如果您随后将该故障点 (" 2 3 ...") 传递给 strtol,它将读取 2 并在之后立即失败,...,...

    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
      char input[] = "6 82 -7453 4 0 63 ";
      char *err = " ", *curr = input;
      int x, k = 0;
      while (*curr && isspace((unsigned char)*err)) {
        x = strtol(curr, &err, 10);
        printf("#%d: %d\n", k++, x);
        curr = err + !!*err; // do not advance past the '\0'
      }
      return 0;
    }
    

    See it in action -- 与上面的 sn-p 不同,ideone 使用 1 :/ 初始化 k 并且不能很好地处理以空格结尾的输入。

    【讨论】:

      【解决方案2】:

      使用

      rc = sscanf(string, "%d%n", &array[i], &len);
      

      在一个循环中。测试 rc,然后使用 len 跳到下一项。

      【讨论】:

        【解决方案3】:

        其实没那么复杂:

        1. strlen计算字符串的长度
        2. 使用malloc 为数组分配足够的内存
        3. 再次遍历字符串并填充数组

        See it in action.

        【讨论】:

        • 你能再扩展一点吗?我该如何处理“1 2 23 400 2 1”之类的问题?这是我无法完全理解的“遍历字符串”。
        【解决方案4】:

        其中一种方法是使用strtok 将字符串标记为空格,每个strtok 调用的返回值可以与sscanf 一起用于单个整数。如您所知,您可以迭代数组以与sscanf 一起使用these lines 上的某些内容。
        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2013-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多