5 Stimmen

Umwandlung von C++-String in int

Ich habe die folgenden Daten in einem C++-String

John Doe 01.01.1970

Ich muss das Datum und die Uhrzeit daraus in int-Variablen extrahieren. Ich habe es wie folgt versucht:

int last_space = text_string.find_last_of(' ');
int day = int(text_string.substr(last_space + 1, 2));

Aber ich habe invalid cast from type ‘std::basic_string’ to type ‘int’ . Wenn ich den "John Doe"-Teil in eine andere String-Variable extrahiere, funktioniert alles einwandfrei. Was ist das Problem?

Ich versuche, es mit g++ -Wall -Werror zu kompilieren.

5voto

Axel Gneiting Punkte 5183

Sie müssen Folgendes verwenden

std::stringstream ss; 
ss << stringVar;
ss >> intVar;

ou

intVar = boost::lexical_cast<int>(stringVar); .

Letzteres ist ein bequemer Wrapper aus der boost-Bibliothek.

3voto

Martin York Punkte 245363

Verwenden Sie Streams, um Ganzzahlen aus einer Zeichenkette zu dekodieren:

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    std::string         x = "John Doe 02.01.1970";

    std::string         fname;
    std::string         lname;
    int                 day;
    int                 month;
    int                 year;
    char                sep;

    std::stringstream   data(x);
    data >> fname >> lname >> day >> sep >> month >> sep >> year;

    std::cout << "Day(" << day << ") Month(" << month << ") Year(" << year << ")\n";
}

Der Operator >>, wenn er mit einer String-Variablen verwendet wird, liest ein einzelnes (durch Leerzeichen) getrenntes Wort. Bei Verwendung mit einer Integer-Variablen wird eine ganze Zahl aus dem Datenstrom gelesen (wobei alle fortlaufenden (weißen) Leerzeichen verworfen werden).

2voto

yasouser Punkte 4981

Versuchen Sie die Daten/Zeit erhöhen Bibliothek.

0voto

Maxpm Punkte 22560

So weit ich das beurteilen kann, atoi tut, was Sie brauchen.

"Analysiert den C-String str und interpretiert seinen Inhalt als ganze Zahl, die als int-Wert zurückgegeben wird."

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

0voto

Mark Punkte 9728

Unter der Annahme (und das ist vielleicht eine falsche Annahme), dass alle Daten ähnlich formatiert sind, würde ich etwa so vorgehen

char name[_MAX_NAME_LENTGH], last[_MAX_NAME_LENGTH];
int month, day, year;

sscanf( text_string, "%s %s %2d.%02d.%04d", first, last, &month, &day, &year );

Dies hat jedoch das Problem, dass die Vor- und Nachnamen, die in Ihrer Eingabe erscheinen, nur aus einem Wort bestehen (d.h. dies würde nicht für Dinge wie "John M. Doe" funktionieren). Außerdem müssen Sie eine angemessene Maximallänge für die Zeichenkette festlegen.

Es ist schwierig, diese Lösung genauer zu bestimmen, solange wir nicht mehr über die Eingabe wissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X