我有一个非常基本的问题,如果我有一串这样的字符: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
等
我记得几年前,我是递归地做过但我不记得怎么样,但现在我不需要一个优雅的解决方案......我需要一个有效的方法。
答案 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
答案 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;
}
}