cin >> *integerVar >> *charVar;
kann Eingaben wie "25 b" korrekt lesen. Was ist der einfachste Weg, dies mit einer vorhandenen Zeichenfolge zu tun (ich kann es manuell tun, indem ich jeden Teil aufspalte und dann analysiere, aber was ist der bessere Weg)?Wie analysiert man eine Zeichenfolge zu mehreren Typen in C++?
Antwort
eine istringstream
verwenden, wie zum Beispiel:
#include <string>
#include <sstream>
int main(void)
{
std::istringstream ss("25 b");
int x; std::string bstr;
ss >> x >> bstr;
return 0;
}
// note that std:istringstream allows ss >> x, but not ss << "some value".
// if you want to support both reading and writing, use a stringstream (which would then support ss >> x as well as ss << "some value")
Sollten wir 'istringstream' nicht als spezialisiertere Klasse verwenden? – HolyBlackCat
@HolyBlackCat: Ich denke 'istringstream' drückt die Absicht besser aus, wenn du nur lesen willst, aber' stringstream' funktioniert auch. –
@HolyBlackCat: Ja, das wäre besser; korrigierte die Antwort; danke für den Kommentar. –
können Sie verwenden, um die stringstream und string (Template) Klassen:
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string s;
std::getline(std::cin, s);
std::stringstream ss(s);
int n;
char c;
ss >> n >> c;
return 0;
}
von std::stringstream
mit:
std::stringstream myStr{"25 b"};
myStr >> *integerVar >> *charVar;
Sie kann sscanf verwenden, die tun es genau das gleiche wie scanf verwendet aber eine Zeichenfolge anstelle von STD Eingang
#include<iostream>
#include<stdlib>
#include<stdio>
int main(){
std::string str;
char character;
int intnumber;
cin >> str;
sscanf (str.c_str(), "%d%c", &intnumber, &character);
}
Besser geben Sie ein Beispiel, weil dies erfordert ein bisschen Massieren eines 'string' zu arbeiten und' scanf' und Freunde sind notorisch blind, wenn es darum geht, die falschen Datentypen gefüttert zu werden. – user4581301
@ user4581301 so etwas in Ordnung? – ZioCain
Ziemlich nah. Empfehlen Sie anstelle von 'char *' für 'str',' char' anstelle von 'char *' für 'zeichen' und' sscanf (str.c_str(), "% d% c ", & inNumber, & Zeichen);' auf dem Anruf. weil Sie sonst einige nicht initialisierte Zeiger verwenden (und eine zusätzliche Adressierungsstufe beim Aufruf). – user4581301
- 1. Wie analysiert man eine C-Header-Datei?
- 2. Wie man eine Dauer-Zeichenfolge in Sekunden mit Javascript analysiert?
- 3. Simple analysiert eine Zeichenfolge zu falscher Zeit
- 4. Wie analysiert man den Befehlsbaum in C++?
- 5. Wie analysiert man diese bestimmte JSON-Zeichenfolge?
- 6. Wie man ein Stundenformat in c analysiert?
- 7. Wie analysiert man eine M3U8-Datei in Objective C?
- 8. Wie analysiert man die Textdatei in C#?
- 9. Wie wird die Zeichenfolge analysiert?
- 10. wie man eine Baumdatenstruktur analysiert?
- 11. Wie analysiert man eine Zeichenkette zu einer Ganzzahl ohne Bibliotheksfunktionen?
- 12. Ganzzahl zu Zeichenfolge C
- 13. Wie man eine "Binding-Schleife" analysiert
- 14. Wie analysiert man eine Sammlung von C++ - Header-Dateien?
- 15. Wie analysiert man diese Zeichenfolge in Python mit Regex
- 16. Wie analysiert man eine EPS-Datei mit C#?
- 17. Wie analysiert man eine DICOM-Datei (.IMA-Dateien) mit C++?
- 18. Wie analysiert man die Zeichenfolge mit dem Währungssymbol in Dezimalzahlen?
- 19. Wie man Nicht-Schlüssel-JSON zu C# -Klassen analysiert?
- 20. Wie analysiert man Programmlaufzeit
- 21. Wie analysiert man einen Datenrahmen mit mehreren Headern?
- 22. Wie analysiert man eine XSD, um die Informationen von <xsd: simpleType> -Elementen mit C# zu erhalten?
- 23. Welche .NET-Klasse analysiert eine Zeichenfolge mit mehreren HTTP-Cookies in eine CookieCollection oder einen CookieContainer?
- 24. C# XML-Liste von mehreren Typen
- 25. Wie analysiert man eine Zeichenfolge des Formats "YYYYMMDD" zu einem Timex.Parse.DateTime-Typ?
- 26. Wie analysiert man eine spärliche Adjazenzmatrix?
- 27. Wie analysiert man eine durch Tabulatoren getrennte Textzeile in Ruby?
- 28. Wie man eine Sequenz von "" getrennten Werten in Haskell analysiert
- 29. Wie man Text analysiert
- 30. Wie analysiert man eine Zeichenfolge in einen Float mit drei Dezimalstellen in Java
'std :: string Parser („Meine Quelle string“);' jetzt können Sie 'parser' benutzen, um genau die gleiche Art und Weise Sie' cin'. Dokumentation: http://en.cppreference.com/w/cpp/io/basic_stringstream – user4581301
Warum verwenden Sie Zeiger? Die C++ - Sprache ist nicht C# oder Java; Sie müssen den Operator "new" nicht für jede Variable oder Instanz verwenden. –