Wie liest man Integer elegant mit C ++ - Stream?

8

Ich habe eine Datei voller Zeilen in diesem Format:

%Vor%

Ich möchte nur Zahlen mit C ++ - Streams laden. Was ist der eleganteste Weg, es zu tun? Ich dachte nur an cin.get () und chekikng jedes Char, wenn es Nummer ist oder nicht.

    
poiu 22.01.2011, 12:57
quelle

6 Antworten

5

Sie können ein Gebietsschema verwenden, um zu ändern, welche Dinge aus der Datei gelesen werden, während sie gelesen wird. Das heißt, Sie filtern alle nicht numerischen Werte heraus:

%Vor%

Wenn Sie Ihre Datei lesen, konvertiert sie alle Nicht-Ziffern in Leerzeichen, während Sie nur die Zahlen erhalten. Danach können Sie einfach Ihre normalen Konvertierungen verwenden, um das, was gelesen wird, in Ints umzuwandeln.

%Vor%

Antwort auf die folgenden Kommentare:

Hier ist, was ich getan habe, damit es funktioniert

%Vor%

Und das bringt nur die Ints in den Vektor, nicht mehr und nicht weniger. Der Grund, warum es vorher nicht funktionierte, war zweifach:

  1. Ich füllte mich selbst mit "9", aber nicht mit "9". Ich habe die Füllung in ':' geändert
  2. Zahlen, die größer sind als das, was ein int enthalten kann, sind ein Problem. Ich würde vorschlagen Longs zu verwenden.
wheaties 22.01.2011, 13:19
quelle
7

Ich denke, dieser wäre der schnellste, aber eleganteste Weg:

%Vor%     
SeMeKh 22.01.2011 14:50
quelle
2

Ich würde empfehlen, mindestens kursorische Plausibilitätsprüfungen durchzuführen, wenn Sie dies lesen:

%Vor%     
Konrad Rudolph 22.01.2011 13:23
quelle
1
%Vor%

Eingabe:

  

1 - 2: 3

Ausgabe:

  

a = 1
  b = 2
  c = 3

Sieh dich hier: Ссылка

Hinweis: Dies kann auch zusätzliche Leerzeichen behandeln. So können Sie auch das lesen:

%Vor%

Ähnliches Thema:

Verwenden von ifstream als fscanf

    
Nawaz 22.01.2011 13:08
quelle
0

Einfach,

%Vor%     
kynnysmatto 22.01.2011 13:08
quelle
0

Tut mir leid Konrad, aber ich empfehle: nie bei Schmerz Tod , niemals nie nie (ist das? Klar genug? :-) lesen formatierte Daten aus einer Datei. Tu es einfach nicht.

Es gibt nur einen richtigen Weg, um formatierte Daten einzugeben: Sie können Teile von Zeichen lesen (normalerweise Zeilen, aber Sie können auch Blöcke fester Länge lesen).

Parsen Sie den Eingabetext. Sie werden keine oberflächliche Überprüfung durchführen, sondern einen Parser verwenden, der alle Formatierungsfehler abfangen und diesen Fehler nachvollziehbar melden kann, geeignete Maßnahmen ergreifen (Abbruch, Zeile überspringen und fortfahren, was auch immer) / p>

Trennen Sie die Eingabe (die E / A-Operation) von der Analyse.

Dieser Rat aus jahrzehntelanger Erfahrung als kommerzieller Programmierer: Das Lesen formatierter Eingaben ist für Proof-of-Principal-Programme von Micky Mouse. Selbst wenn Sie die Erstellung der Datei exklusiv kontrollieren, sollten Sie immer Fehler analysieren und prüfen und melden. Schließlich ändert sich einiges, es funktioniert heute, aber nicht morgen.

Ich schreibe seit Jahrzehnten C ++ und ich habe nie eine ganze Zahl gelesen.

    
Yttrill 22.01.2011 14:00
quelle

Tags und Links