【问题标题】:The easiest way to convert multi-digit char to integer将多位字符转换为整数的最简单方法
【发布时间】:2017-11-08 05:38:20
【问题描述】:

假设这是一个 C 中未知数字的字符:

char char_id[1000] = {'1', '2', '3', ..., '8', '9', '\0'};

如果我希望最后两位数字形成一个整数,即'89'。

最简单的方法是什么?

【问题讨论】:

  • 首先,删除'/0'或替换为'\0'。然后使用strlenatoi
  • char num[1]; int len = strlen(char_id); sprintf(num, "%c%c", char_id[len-1], char_id[len]);
  • @Gaurav 还是错了。 1) char num[1]; 太小。 2) OP 希望 将多位字符转换为整数
  • Let's say here is a char..等等!!停止!! charchar 数组不是一回事!!
  • @Gaurav 好吧,这更适用于 OP,但欢迎。 :)

标签: c char integer


【解决方案1】:

可能是这个

char char_id[1000] = {'1', '2', '3', /*..., */ '8', '9', '\0'};
int what_i_want    = atoi( char_id + ( strlen(char_id) - 2 ) );

顺便说一句,这些点有点垃圾,评论他们

【讨论】:

    【解决方案2】:

    我假设您想获取最后两个(非 NUL)字符并将它们转换为 int 变量。可以通过多种方式完成:

    这是一种方法:

    int main(void) {
        int n;
        char char_id[1000] = {'1', '2', '3', '8', '9', '\0'};
        size_t len = strlen(char_id);
        if (len >= 2)
        {
            n = atoi(&char_id[len-2]);
            printf("%d\n", n);
        }
        else
        {
            printf("string too short\n");
        }
        return 0;
    }
    

    输出:

    89
    

    另一种转换可能是:

    n = strtol(&char_id[len-2], NULL, 10);
    

    【讨论】:

    • 不重要,但您应该将int n = 0; 直接移动到您调用atoi() => int n = atoi(&char_id[len - 2]); 并且可能建议使用strtol() 而不是atoi()
    • @Stargateur - 我添加了 strtol 另一个选项
    【解决方案3】:

    这是将字符串转换为 int 的简单函数。

    int str2int(char *numStr)
    {
        int intVal=0 ;
    
        while(*numStr != '\0')
        {
            intVal *= 10;
            intVal  += *numStr - '0'; //0x30 ascii value of charater 0
            numStr++;
        } 
        return intVal;
    }
    

    要转换最后 2 位数字,您可以传递该数字的地址,例如 &char_id[5]

    【讨论】:

      【解决方案4】:
      • 您可以简单地使用atoi 函数。 size_t pos = strlen(char_id);

      int num = atoi(&char_id[pos-2]);

      或者干脆

      int num = (char_id[pos-2]-'0')*10+(char_id[pos-1]-'0');

      第一个解决方案使用 ASCII 编码 - 这使得该解决方案无法跨不同平台使用。

      • 使用null 字符。 \0.

      • 如果是数字,那么您可以轻松地使用此处显示的第二种方式。

      【讨论】:

      • int num = atoi(char_id[pos-2])*10+atoi(char_id[pos-1]); --> int num = atoi(&char_id[pos-2]);
      • 还是错了。请注意atoi 不会转换单个字母。 (我还没有投反对票。)
      • @BLUEPIXY:这里的 atoi 被高估了但是是的..我们可以做到这一点。检查一次
      • @Stargateur.: 哦...我错过了。检查一次..感谢指出
      • @AjayBrahmakshatriya 数字 - '0' 是可移植的。
      【解决方案5】:

      您将整个号码作为字符串存储在char_id 中。

      您需要首先获取要从中获取数字的字符串的开头。

      既然你想要最后两位数字,一个简单的方法是 -

      char *sub_string = char_id + (strlen(char_id) - 2);
      

      这假设最后有一个\0。如果您没有,但知道整个数组已填满,您可以使用sizeof(char_id)

      现在您需要一种可靠的方法来提取存储的整数。 我建议使用sscanf

      int number;
      if(sscanf(sub_string, "%d", &number) != 1) {
           printf ("Invalid number in string");
           // Exit?
      }
      printf("Number scanned = %d\n", number);
      

      【讨论】:

        【解决方案6】:

        我实现了这个功能。

        int char_to_int(char *ptr, int length)
        {
            int sum = 0;
            while(length--)
            {
                sum += (pow(10, length) * ((*ptr++) - 48));
            }
            return sum;
        }
        

        你应该这样使用

        ...
        int number = char_to_int((char_id + 7), 2);
        ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-16
          • 2011-10-03
          • 2015-08-28
          • 2016-11-06
          • 2010-12-21
          • 2012-01-07
          • 2014-12-22
          • 1970-01-01
          相关资源
          最近更新 更多