Wie kann ich eine Zeichenkette in verschiedene Ganzzahlen konvertieren?
Es gibt mehrere Möglichkeiten, Ganzzahlen aus C-Strings zu extrahieren. Die ersten zwei, die in den Sinn kommen, sind die sscanf()
-Funktion und die verschiedenen String-zu-Integer-Konvertierungsfunktionen, wie beispielsweise strtol()
. Zunächst jedoch müssen Sie eine tatsächliche Zeichenfolge haben:
char ray[] = {'2','1','F',' ','2','3', '\0' }; /* note the terminator */
oder das ist 100% entspricht dem vorherigen:
char ray[] = "21F 23"; /* terminator is implicit */
. Dies funktioniert auch ...
char *ray = "21F 23"; /* terminator is implicit */
... obwohl es nicht gleichwertig ist. Ihre Beispieldeklaration ist keine Zeichenfolge, da sie nicht abgeschlossen ist. Darüber hinaus stellen Sie einen Array-Initialisierer für eine Variable bereit, die als Zeiger deklariert wurde. Obwohl Zeiger und Arrays eine enge Beziehung haben, sind sie sehr unterschiedliche Dinge.
Da eine dieser Erklärungen für ray
, könnten Sie dann tun
int num;
int num2;
int result = sscanf(ray, "%d%*[^0-9-]%d", &num1, &num2);
Die sscanf()
Funktion ist wie scanf()
, aber es scannt aus einem String statt von der Standardeingabe. Ich nehme an, dass Sie mit dem Felddeskriptor %d
zum Scannen einer optional signierten dezimalen Ganzzahl vertraut sind; Das Bit zwischen den beiden Deskriptoren %d
beschreibt ein Feld, das durchsucht wird, aber keiner Variablen zugewiesen ist (*
), und das aus einer Folge von einem oder mehreren Zeichen besteht, die keine Dezimalziffern oder ein Bindestrich sind. Eine scanf-basierte Lösung setzt natürlich voraus, dass Sie wissen, wie viele Zahlen in der Zeichenfolge erwartet werden (in diesem Fall zwei).
Wenn Sie nicht sicher sind, wie viele Zahlen in der Zeichenfolge enthalten sind, ist es wahrscheinlich einfacher, Ihre Lösung um strtol()
zu erstellen. Diese Funktion versucht, den Anfangsteil eines Strings in einen Integer umzuwandeln, und wenn er erfolgreich ist, gibt er einen Zeiger auf den Schwanz des Strings zurück, der auf den konvertierten Teil folgt. Sie können dies verwenden, um durch die Zeichenfolge zu gehen und jede Zahl, die Sie finden, während Sie gehen, zu konvertieren.
Warum die Komplexität von 'fgets' hinzufügen? Vielleicht weiß das OP noch nichts über I/O. –
Ich habe fgets() anstelle des veralteten gets() verwendet, da es anfällig für Pufferüberlaufprobleme ist. – RwitamB
Nein, ich meinte nur, warum überhaupt aus einer Datei lesen? Das OP tut dies nicht und weiß vielleicht noch nicht einmal über E/A. –