在char中分隔两个值并将它们分配给变量

时间:2017-01-26 06:58:34

标签: c arduino

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

3 个答案:

答案 0 :(得分:4)

  

如何将char 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;
    }
    
  • 注意:如果,一般来说在而不是中要解决此类问题,您不确定自己是否只有nums中的两个元素 ,您应该使用 动态内存分配 (详细了解here),以及像这样修改你的代码:

    #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("%d\n", *(p+i));
        return 0;
    }
    

答案 1 :(得分:3)

您正在谈论的char很可能是字符串或字符数组,它实际上是指向多个字符的指针。 char只能存储1个字符。

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

  1. 指向字符串开头的字符指针(或您想要开始查找的地方

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

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

答案 2 :(得分:0)

您的数据类型可能是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