2013-10-17 50 views
0

我有一个非常基本的问题,如果我有这样的字符串:char charv1[6] = "v445"v666我怎样才能得到的数字,并把它们变成一个带值的单个整数:445666如何将字符串转换为一个单一的int数字如果字符串也包含字母

我一直在尝试这种代码,但不顺心的事...:

  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包含字符串:v445

我记得几年前,我做了递归,但我做的不记得如何,但现在我不需要一个优雅的解决方案...我需要一个工作。

+0

该字符串的第一个字符是一个字母后跟数字吗? –

+0

@EdHeal是的,总是字符''v''后面跟着数字(假设char的作用)。例如:'v1','v33556','v23' ...等等,我必须将这些数字存储在'int'类型的变量中,如:int i = 33556或其他。 – Gera

回答

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 + 1) , NULL , 10)dest = strtol(&source[1] , NULL , 10);替换此dest = strtol(source , NULL , 10);忽视第一个字符,因为strtol停在它遇到的第一个非数字字符

+0

它的工作原理!谢谢youuuuuuu:D – Gera

2

只使用strtol

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

然后

int x = atoi(&charv1[1]); 
    printf("Here it is as an integer %d\n", x); 
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; 
      } 
     } 
相关问题