gemischtes Chararray --> nur zahlen?
-
Sorry für die Newbiefrage, aber C gibt mir immer wieder Rätsel auf.
Ich habe einen Sring, also CharArray, z.B. "asdf123.456.789asdf" und ich möchte da nur die zahlen haben, am besten in ein long, da es viele zahlen sein können, so 11 stück.
Wie geht das am einfachsten?
Danke für die Hilfe
-
Glaub am einfachsten ist es, den C-String zu durchsuchen (sequentiell, Schleife) und jedes Zeichen, welches eine Ziffer ist (isdigit/wisdigit bzw. _istdigit (WinAPI, Zeichensatzunabhängig, Header: <tchar.h>) in einen neuen C/C++-String kopierst (könntest diese auch wieder an den Anfang des aktuellen Strings packen, also überschrieben, falls Du schreibzugriff hast/erlaubst, dass spart Speicherplatz). Diesen kannst Du dann mit atol (C, <stdlib.h>) oder mit std::stringstream (C++, <sstream>) in einen numerischen Datentyp umwandeln.
-
n'abend,
umständlich...?
- iteriere durch den string durch und zähle die anzahl der ziffern
- speicher für ein array of char alloziieren
- iteriere erneut durch den string und füge, wenn es eine zahl ist, in das char-array
- nutze atol um den string in eine zahl umzuwandeln
- speicher wieder freigebeneinfacher...?
weiß bestimmt jemand anders.
-
hm, lol, joar entspricht dem, was ich gesagt habe, außer meinem kleinen Performancetipp
.
-
ok hab ich geschnallt
aber dann schnall ich nich wieso er das nicht bzw falsch macht..:for (j = 0; j < strlen(cBuffer); j++) { if ( cBuffer[j] >= '0' && cBuffer[j] <= '9') { digits[index] = cBuffer[j]; index++;} } printf(digits); printf("\n"); long li = atol(digits); printf("%d",li);bei "printf(digits)" gibt er die richtigen Zahlen aus aber hinter den zahlen steht ein "is" ??
und dann gibt er in "li" die falschen zahlen aus ...
-
ok ich habs ein wenig geändert und jetzt tut es das was ich will.
brauche nun garkein long mehr sondern arbeite direkt mit dem string aus digits..danke für die hilfe