PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c] wiedermal Stringmist :(


Gast
2006-04-25, 20:08:42
Hi,
ich möchte (bzw soll) ein kleines Programm schreiben, dass einen String auswertet: char *zeile = "Berechne 4 6 + 8 * 4 + 7"
(also das soll bedeuten: (((4 + 6) + 8) * 4) + 7 )

Wie man "Berechne" überspringt weiss ich (while (!isblank(zeile[i])) i++; ), aber wie man dann aus einem Zeichen einen Zahlenwert bekommt, weiss ich nicht.
if ( zeile[i] == '1' ...
if ( zeile[i] == '2' ...
Das kanns ja nicht sein...

Coda
2006-04-25, 20:14:57
atoi

Gast
2006-04-25, 20:18:33
Schon probiert:zahl = atoi(zeile[i]);
Gibt einen Segmentation fault.
Kommentiere ich die Zeile aus, gibts keinen.

Gast
2006-04-25, 20:25:16
int berechnezeile (char *zeile) {
int res;
...
res = atoi(zeile[0]); // bumm
while...
...
return res;
}

Pinoccio
2006-04-25, 21:05:40
atoiWie kommt man bitte auf solche Funktions-Namen? Ein englisches Wort ist es wohl nicht (http://m-w.com/dictionary/atoi), vielleicht französisch (http://www.ponsline.de/cgi-bin/wb/w.pl?von=&Richtung=FD&ID=20300poFq9pnc9AZos) im Sinne von "ich parse das für dich"?

mfg Sebastian

SamStone
2006-04-25, 21:08:42
Wie kommt man bitte auf solche Funktions-Namen? Ein englisches Wort ist es wohl nicht (http://m-w.com/dictionary/atoi), vielleicht französisch (http://www.ponsline.de/cgi-bin/wb/w.pl?von=&Richtung=FD&ID=20300poFq9pnc9AZos) im Sinne von "ich parse das für dich"?

mfg Sebastian
Nich ganz ;)
atoi = array to integer. Und das ist genau das, was er auch macht.

Gast
2006-04-25, 21:09:03
a scii
to
i nteger

vll?

Coda
2006-04-25, 21:36:12
"ascii to integer" ist richtig

Schon probiert:zahl = atoi(zeile[i]);
Gibt einen Segmentation fault.
Kommentiere ich die Zeile aus, gibts keinen.
Dann ist entweder dein String nicht richtig mit 0 terminiert oder die Speicheradresse falsch.

Gast
2006-04-26, 17:10:43
"ascii to integer" ist richtig


Dann ist entweder dein String nicht richtig mit 0 terminiert oder die Speicheradresse falsch.Weder noch.
Richtig wäre es so:zahl = atoi(zeile+i);Man beachte den Unterschied zwischen einem einzelnen char und einem Zeiger auf chars ... aber eigentlich hätte der Compiler da zumindest warnen müssen IMO.

-zecki

Coda
2006-04-26, 18:42:52
Weder noch.
Richtig wäre es so:zahl = atoi(zeile+i);Man beachte den Unterschied zwischen einem einzelnen char und einem Zeiger auf chars ... aber eigentlich hätte der Compiler da zumindest warnen müssen IMO.

-zecki
Das fällt doch unter "Speicheradresse falsch", oder nicht? :tongue:

Ich weiß schon was ich atoi übergeben muss, aber so genau hab ich halt nicht hingeschaut.

Gast
2006-04-27, 08:48:23
Wie kommt man bitte auf solche Funktions-Namen?Die Konvertierfunktionen aus der stdlib.h sind eigentlich schon logisch aufgebaut:

atof -> ascii to float
strtod -> string to double
oder
ultoa -> unsigned long to ascii

usw.

Coda
2006-04-27, 15:20:13
ultoa ist aber kein Standard.

Gast
2006-04-28, 18:17:57
... oder


zahl = atoi(&zeile[i])