如何在c中将一串数字(字符)转换为整数值

时间:2012-10-07 02:54:11

标签: c

我需要将数字字符数组转换为整数值,以便在C中执行数学运算。当我使用atoi(argv [2] [count])时,它只将第一个数字转换为整数。因此,如果argv [2] = 123,它只将'1'转换为整数1.如何将'123'变为一个整数值123?谢谢!

2 个答案:

答案 0 :(得分:3)

atoi是一个很好用的功能,但你可以在C中编写自己的atoi功能。

int xatoi(char *s)
{
   int result=0;       

   while(*s)
   {

     result=result*10+(*s-48);
     s++; 
    }

  return result;

} 这背后的逻辑是每个字符' 1' 2' ......' ascii值被存储,例如' 1' 1' 1'具有ASCII值' 49'请编译以上程序并检查错误我还没有测试过,但我相信它会起作用。

请参阅以下链接以供参考 http://www.newebgroup.com/rod/newillusions/ascii.htm

答案 1 :(得分:0)

argv是一个字符串数组数组,因此argv[N]为您提供了一个数组。但是argv[N][J]会为J中存储的数组的argv[N]位置提供元素。但是,很奇怪编译器没有抱怨你的代码,因为atoi()函数实际上需要一个指针(以空字符结尾的字符串)而不是字符值。编译器应该说warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast之类的东西。我建议你不要忽视警告。我个人倾向于编译具有最高警告级别的代码而没有一个警告,尽管我们的代码库在工作中是数百万行代码。

此外,更喜欢使用strtol而不是atoiatoi的问题在于它忽略了无效输入(即如果没有问题,只返回0,而不影响errno)。

无论如何,这是一个如何从命令行中获取基数10整数数组的示例:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int  i;
    int  n;
    char    *e;
    int     *v;

    if (argc < 2) {
        fprintf(stderr, "Please specify some numbers\n");
        return EXIT_FAILURE;
    }

    n = argc - 1;
    v = alloca(sizeof(int) * n);

    for (i = 1; i < argc; ++i) {
        v[i-1] = strtol(argv[i][i], &e, 10);
        if (!v && errno) {
            fprintf(stderr, "Cannot convert '%s' into number: %s\n",
                argv[i], strerror(errno));
            return EXIT_FAILURE;
        } else if (*e != '\0') {
            fprintf(stderr, "%s is not a number\n", argv[i]);
            return EXIT_FAILURE;
        }
    }

    printf("You have entered the following numbers: %d", v[0]);

    for (i = 1; i < n; ++i)
        printf(", %d", v[i]);
    printf("\n");

    return EXIT_SUCCESS;
}

希望它有用。