2017-01-12 4 views
0

Wie kann ich ein zwei Ziffern von Array zu einer ganzen Zahl in eine neue Array-Format konvertieren?C zwei Ziffern konvertieren eine ganze Zahl

Beispiel: 1245678933658 auf [12,45,67,89,33,65,80] 0 hinzufügen, bis zum letzten, wenn seine eine ungerade.

Mein Versuch war:

new_array[i]=digits[i]*10+digits[i++]*10/10; 
+0

Wenn die ursprünglichen Ziffern ASCII-Zeichen sind, vergessen Sie nicht, dass Sie '0' subtrahieren müssen; das heißt, '0' - '0' = 0, '1' - '0' = 1 usw. –

+5

Ihr Beispiel klassischer UB ist. – 0andriy

+0

'i ++' 'Schritte I' * nach * der ursprünglichen Wert wurde wieder übergeben. Ich nehme an, du meintest "++ i". Aber Sie sollten wirklich mehr explizit in Hinblick darauf, wo Sie einen Index erhöhen und wo Sie es verwenden, um nicht auf jedem [Sequenzpunkt] zu verlassen (https://en.wikipedia.org/wiki/Sequence_point) Annahmen. – chrisaycock

Antwort

0

Hat es einen "one-liner" sein, oder wäre ein lesbarer Code auch erlaubt sein? Versuchen Sie Folgendes:

const char* digits = "12456789336581"; 
int digitIndex=0; 
int numbers[100]; 
int currentNumberIndex = 0; 
int currentNumber = 0; 
while (digits[digitIndex]) { 
    currentNumber *=10; 
    currentNumber += digits[digitIndex] - '0'; 
    digitIndex++; 

    if ((digitIndex)%2 == 0) // two digits handled? 
    { 
     numbers[currentNumberIndex++] = currentNumber; 
     currentNumber = 0; 
    } 
} 

// handle the case that last number contained just one digit: 
if (digitIndex%2) { 
    currentNumber *=10; 
    numbers[currentNumberIndex++] = currentNumber; 
} 

for (int i=0; i < currentNumberIndex; i++) 
    printf("number[%d]: %d\n", i, numbers[i]); 
+0

Thx !! funktioniert für mich –

+2

Hinweis: 'while (isdigit ((unsigned char) Ziffern [digitIndex]))' eine defensive Codierung wäre. – chux

Verwandte Themen