Hallo miteinander, ich habe einen String in dem eine Zahl ist. Wie bekomme ich diese Zahl aus dem String? Vorraussetzungen: 1. Ich weiß nicht wie viele Stellen diese Zahl hat. 2. Ich weiß, dass diese Zahl nach dem ersten Leerzeichen kommt. Mir fällt da jetzt nur ein: -Suche nach dem ersten Leerzeichen im String. Merken! -Suche nach dem zweiten Leerzeichen im String. Merken! -"memcpy()" die Zeichen die zwischen den beiden Leerzeichen in einen neuen String -"atoi()" den neuen String. Geht doch sicher einfacher, oder nicht?
die ersten zwei punkte könntest du noch durch strtok ersetzen, nachteil an der ganzen lösung ist aber, dass die verwendeten funktionen meistens nicht gerade sparsam mit flash und arbeitsspeicher umgehen. ich würde das ganze selber lösen (beginn so ähnlich wie du schon geschrieben hast, den teil in der mitte aber durch einfache multiplikation und addition ersetzen. achtung auf die größe der zahlen, wenn die breiter mehr als 16 bit werden, dann wird die performance noch lahmer...
Gast
#2941967
Was für eine Zahl? Mit Komma? Mit Minuszeichen? 34.0 und/oder 34,0? 3.4e1?
Welche Programmiersprache? atoi, also wohl C oder C++ Du könntest das 2. Leerzeichen duch ein binäres 0 ersetzen und dann atoi auf den Offset+1 des ersten Leerzeichens ansetzen. Das erspart dir das Umkopieren. Falls der String anschliessend weiterverwendet werden soll die 0 wieder durch ein Blank ersetzen. Ansonsten gehts so wie du es beschrieben hast.
Daniel F. schrieb: > achtung auf die größe der zahlen, wenn die breiter mehr als 16 bit > werden, dann wird die performance noch lahmer... Der Thread steht in PC Hard und Software, nicht in AVR Microcontroller :-)
EDITH sagt genauer lesen. habe gerade gesehen, dass wir uns hier im bereich pc-programmierung aufhalten. also den ganzen quatsch mit flash und arbeitsspeicher, zahlengröße, etc. vergessen und nur den ersten halbsatz lesen. dann dürfte das ganze auch ganz gut funktionieren, v.a. weil dann auch noch eine memcpy wegfallen müsste (habe strtok nicht auswendig im kopf) p.s. meine änderung und udos beitrag haben sich überschnitten ;-)
Super Danke! Probiere das gleich mal mit der 0. Und ja die Sprache ist C (Sorry wegen der fehlenden Info ;)) und es handelt sich ausschließlich um natürliche Zahlen (Byte-Angaben).
Gast
#2941985
Auf einem PC kann man aber strtok durchaus einsetzen. Das ist aber auch nicht nötig. Mit strchr nach den Leerzeichen suchen und dann gleich mit strtol (oder atoi) an der Fundstelle+1 umwandeln. Ohne memcpy. Das geht auch mit sscanf
1 | |
2 | |
3 | |
4 | |
5 | |
R. B. schrieb: > Mir fällt da jetzt nur ein: > -Suche nach dem ersten Leerzeichen im String. Merken! > -Suche nach dem zweiten Leerzeichen im String. Merken! > -"memcpy()" die Zeichen die zwischen den beiden Leerzeichen in einen > neuen String > -"atoi()" den neuen String. > > Geht doch sicher einfacher, oder nicht? Ja. atoi erkennt das Ende der Zahl, also genügt es, das erste Leerzeichen im String zu suchen und atoi einen Pointer auf das auf dieses Leerzeichen folgende Zeichen zu übergeben. Keine Stringkopie nötig, fertig. Wobei atoi auch keine Probleme mit führenden Leerzeichen hat, also kann man auch direkt einen Pointer auf das erste gefundene Leerzeichen übergeben.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.