如果字符串也包含字母,如何将char字符串转换为单个int数字

时间:2013-10-17 21:50:32

标签: c string char int

我有一个非常基本的问题,如果我有一串这样的字符:char charv1[6] = "v445"v666如何获取数字并将它们转换为具有值的单个整数:{{1 }或445

我一直在试用这段代码,但出了点问题......:

666

size = (strlen(charv1)-1); for(aux = size; aux > 0; aux--){ if(aux == (size)){ v1 = charv1[aux]-'0'; } else{ aux2 = (charv1[aux]-'0')*10; printf("%d\n", aux2); v1 = v1 + aux2; } } 包含字符串:charv1

我记得几年前,我是递归地做过但我不记得怎么样,但现在我不需要一个优雅的解决方案......我需要一个有效的方法。

5 个答案:

答案 0 :(得分:2)

只需使用strtol

long int num;
char* end;
num = strtol(&charv1[1], &end, 10);

答案 1 :(得分:2)

有一个名为strtol()的函数,它的用法如下:

 long dest = 0;
    char source[10] = "122";

    dest = strtol(source , NULL , 10); // arg 1 : the string to be converted arg2 : allways NULL arg3 : the base (16 for hex , 10 for decimal , 2 for binary ...)

但在您的情况下,您应该将此dest = strtol(source , NULL , 10);替换为此dest = strtol((source + 1) , NULL , 10)dest = strtol(&source[1] , NULL , 10);以忽略第一个字符,因为strtol会在遇到的第一个非数字字符处停止

答案 2 :(得分:2)

sscanf

怎么样?
sscanf( charv1, "%*c%d", &i); //skip the first char then read an integer

http://codepad.org/vOg22G8e

答案 3 :(得分:1)

然后

   int x = atoi(&charv1[1]);
   printf("Here it is as an integer %d\n", x);

答案 4 :(得分:1)

你忘记了每个循环乘以10。这有效:

        size = (strlen(charv1)-1);
        dec=10;
        for(aux = size; aux > 0; aux--){
            if(aux == (size)){
                v1 = charv1[aux]-'0';
            }
            else{

                aux2 = (charv1[aux]-'0')*dec;
                printf("%d\n", aux2);
                v1 = v1 + aux2;
                dec*=10;
            }
        }