C语言 分隔字符中的两个值并将它们分配给变量



C和Arduino编程的新手,我的问题,如何将char c拆分为两个单独的整数变量? char c 的值看起来像这样 140,100 ,两个数字都是整数。我需要根据这些数据创建两个整数变量,SpeedXSpeedY,以便SpeedX = 140SpeedY = 100。感谢您的帮助!

如何将字符 C 拆分为两个单独的整数变量?

  • 首先,您拥有的是字符串,而不是char
  • 您可以使用 strtok() 函数拆分字符串(并指定要使用的分隔符),如下所示:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char nums[] = "140,100";
        char *str;
        int num;
        int SpeedX, SpeedY, i = 0;
        str = strtok (nums, ",");
        while (str != NULL)
        {
            num = atoi(str);
            if (i == 0)
               SpeedX = num;
            else if (i == 1)
               SpeedY = num;
            str = strtok (NULL, ",");
            i++;
        }
        return 0;
    }
    
  • 注意:如果一般来说,在c而不是arduino中解决这样的问题,你不确定你nums中只有两个元素 ,你应该使用动态内存分配(在这里阅读更多关于它的信息),并像这样修改你的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char nums[] = "140,100,500";
        char *str;
        int num;
        int len, i = 0;
        int *p;
        str = strtok (nums, ",");
        len = strlen(str);
        p = malloc((len-1)*sizeof(int));
        while (str != NULL)
        {
            num = atoi(str);
            *(p+i) = num;
            i++;
            str = strtok (NULL, ",");
        }
        for (i = 0; i < len-1; i++)
        printf("%dn", *(p+i));
        return 0;
    }
    

你说的字符很可能是字符串或字符数组,它实际上是指向许多字符的指针。一个字符只能存储 1 个字符。

在 stdlib.h 中定义的函数 strtol 有三个参数:

  1. 指向字符串开头(或要开始查找的位置)的字符指针

  2. 指向字符指针的指针
  3. ,该指针将更新为指向数字末尾后的第一个字符

  4. 表示数字的基数,在您的情况下很可能为 10

你的数据类型可能是char*char[50],因为char只能表示一个字符,而不是像"140,100"那样的字符序列。无论如何,请使用 sscanf ,它会扫描字符串并根据给定格式提取值:

char *myNums = "140,100";
int first,second;
int elementsRead = sscanf(myNums,"%d,%d", &first, &second);
// note: elementsRead is `2` if both format specifiers `%d` and `%d` have been scanned successfully

最新更新