Char aus String -> int
-
Hallo Forum!
Wie kann ich aus einem Srtring die einzelnen chars auslesen und in int umwandeln?
Mein Ansatz:char myString [] = "14458718"; int i = 0; int sum = 0; int int_counter = 0; while (int_counter < strlen (myString)) { sscanf (myString[int_counter], "%d", &i); sum += i; } printf ("Summe: %d\n", sum);
Ziel ist dass ich die Summe der String-Zahlen bilde (also in diesem Bsp sollte als Ergebnis 38 rauskommen).
Der Compiler spuckt folgende Fehlerlemdung aus: Konvertierung des Parameters 1 von 'char' in 'const char *' nicht möglich
Danke für die Hilfe!
MfG
Rene
-
Du denkst viel zu kompliziert und zudem verstehst du sowohl die Bedeutung des "%d" bei (s)scanf als auch des s bei sscanf nicht richtig. Deinen Ansatz würde ich gar nicht weiter verfolgen. Stattdessen viel einfacher:
char *mystring = "14458718"; int sum = 0; while (*mystring) sum += *mystring++ - '0'; printf("%d\n", sum);
Wenn du dies verstehst (bei Unklarheiten ruhig fragen, aber versuch es erst einmal selber), hast du viel über Zeichenketten in C gelernt und wie man sie verarbeitet, über Pointer, sowie über den Unterschied zwischen den Ziffernzeichen und ihrem Wert, als auch darüber, dass man mit chars ganz normal rechnen kann.
edit: Damit du nicht lange nach Operatorprioritäten suchen musst, der Ausdruck
*mystring++ - '0'
wird in folgender Reihenfolge ausgewertet:((*(mystring++)) - '0')
-
Hallo Sepp!
Danke für deine Hilfe! Eine Frage dazu: was ist char *mystring. Was bedeutet das "*"?
MfG
Rene
-
Bei der Definition einer Variable ist der * das Kennzeichen für einen Pointer (Zeiger)
Beim Zugriff auf die Variable ist er der Dereferenzierungsoperator.
Damit greift man auf den Inhalt der Stelle zu, auf die der Zeiger verweist.Das mystring ist ein Zeiger, der auf das Stringliteral "14458718" zeigt.
Durch das *mystring kommst du an den Inhalt. Also die '1'.
Nach dem mystring++ zeigt mystring auf die nächste Speicherstelle, die '4'.
Danach dann die nächset '4', die '5', ....Du kannst das auch in Arrayschreibweise machen:
char mystring[] = "14458718"; int i = 0; int sum = 0; while (mystring[i]) // genauer: (mystring[i] != '\0' ) sum += mystring[i++] - '0'; printf("%d\n", sum);
In diesem Beispiel ist mystring ein Array.
Hier kannst du mystring nicht inkrementieren. mystring ist hier immer der Verweis auf das erste Element vom Array.
-
Danke für die ausführliche erklärung! Kannte noch keine Pointer da wir dieses Kapitel noch nicht durchgearbeitet haben.
THX!
-
@myrevolution78
Falls du es noch nicht kennst, hier siehst du was es mit dem char Rechnen auf sich hat.Hier die ASCII Tabelle: http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
#include <stdio> int main() {char *mystring = "14458718"; int sum = 0; printf("%d \n",(int)'0'); // Gibt aus 48 printf("%d \n",(int)*mystring ); // Gibt aus 49 ( 49 Dezimal = 1 ASCII ) *mystring++; printf("%d \n",(int)*mystring ); // Gibt aus 52 ( 52 Dezimal = 4 ASCII ) sum = *mystring - '0'; // *mystring = 52 Dezimal = 4 ASCII '0' = 48 Dezimal 52 - 48 = 4 printf("Endergebniss: %d \n",sum); return 0; }