Ganzzahlen aus einer Textdatei mit C ifstream lesen
Das Abrufen und Speichern von Graph-Adjazenzinformationen aus einer Textdatei in einem Vektor stellt eine Herausforderung dar, wenn Umgang mit Zeilen mit variabler Ganzzahlzahl. Hier ist eine umfassende Lösung mit dem ifstream von C:
Der traditionelle Ansatz besteht darin, jede Zeile mit getline() zu lesen und einen Eingabezeichenfolgen-Stream zum Parsen der Zeile zu verwenden. Diese Technik funktioniert gut für Zeilen mit einer konsistenten Anzahl von Ganzzahlen.
#include
#include
#include
std::ifstream infile("text_file.txt");
std::string line;
while (std::getline(infile, line)) {
std::istringstream iss(line);
int n;
std::vector v;
while (iss >> n) {
v.push_back(n);
}
// Process the vector v
}
Wenn Sie jedoch Zeilen mit unterschiedlichen Ganzzahlzahlen haben, gibt es eine einzeilige Lösung, die eine Schleife und das „Stay“-Idiom nutzt, mit freundlicher Genehmigung von Luc Danton:
#include
#include
#include
int main() {
std::vector<:vector>> vv;
for (std::string line;
std::getline(std::cin, line);
vv.push_back(std::vector(std::istream_iterator(std::move(std::istringstream(line))),
std::istream_iterator()))
);
// Process the vector of vectors vv
}
In diesem Snippet stellt die Redewendung „stay“ sicher, dass die bereitgestellte L-Wert-Referenz nach der Verschiebung gültig bleibt. Die Verschiebung ist aus Effizienzgründen notwendig, da dadurch unnötiges Kopieren von Zeichen vermieden wird.
Diese Lösungen bieten effiziente und vielseitige Methoden zum Extrahieren von Ganzzahlen aus einer Textdatei und zum Speichern dieser in einem Vektor, unabhängig davon, ob die Zeilen ein konsistentes oder haben unterschiedliche Anzahl von Ganzzahlen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3