Wie suchst du eine std :: string für einen Teilstring in C ++?

7

Ich versuche, eine einfache Zeichenfolge in C ++ zu analysieren. Ich weiß, dass die Zeichenfolge einen Text mit einem Doppelpunkt enthält, unmittelbar gefolgt von einem Leerzeichen und einer Zahl. Ich möchte nur den Zahlenabschnitt der Zeichenfolge extrahieren. Ich kann nicht nur auf den Platz Tokenize (mit Stream und & lt; & lt;), weil der Text vor dem Doppelpunkt Leerzeichen enthalten kann oder nicht.

Einige Beispielzeichenfolgen könnten sein:

  

Gesamtspeicherplatz: 9852465

     

Freier Speicherplatz: 6243863

     

Sektoren: 4095

Ich würde gerne die Standardbibliothek verwenden, aber wenn Sie eine andere Lösung haben, können Sie das auch posten, da andere mit der gleichen Frage möglicherweise andere Lösungen sehen möchten.

    
Bill the Lizard 06.12.2008, 21:59
quelle

6 Antworten

14
%Vor%     
Brian R. Bondy 06.12.2008, 22:05
quelle
8

Der Vollständigkeit halber ist hier eine einfache Lösung in C:

%Vor%

Erklärung: %*[^:] sagt, dass so viele mögliche Zeichen eingelesen werden sollen, dass sie keine Doppelpunkte sind, und die * unterdrückt die Zuweisung. Dann wird die Ganzzahl nach dem Doppelpunkt und jedem dazwischenliegenden Leerraum eingelesen.

    
Adam Rosenfield 06.12.2008 22:09
quelle
4
  

Ich kann nicht nur in den Raum tokenisieren (mit sstream und & lt; & lt;), weil der Text vor dem Doppelpunkt Leerzeichen enthalten kann oder nicht.

Richtig, aber Sie können std::getline verwenden:

%Vor%     
Konrad Rudolph 06.12.2008 22:09
quelle
3

Ähnlich wie Konrads Antwort, aber mit istream::ignore :

%Vor%     
Johannes Schaub - litb 06.12.2008 23:29
quelle
3

Ich bin überrascht, dass niemand reguläre Ausdrücke erwähnt. Sie wurden als Teil von TR1 hinzugefügt und sind in Boost enthalten auch. Hier ist die Lösung mit Regex

%Vor%

Es sieht nach viel mehr Arbeit aus, aber Sie haben mehr davon IMHO.

    
D.Shawley 07.12.2008 02:54
quelle
2
%Vor%     
orip 06.12.2008 22:08
quelle

Tags und Links