2013-10-17 63 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; 
      } 
     } 
相關問題