Die einfache Version ist die Verwendung eines Manipulators ähnlich std::ws
, aber statt alle Whitespace-Einstellung std::ios_base::failbit
zu überspringen, wenn ein Newline auftritt. Dieser Manipulator würde dann verwendet werden, um Whitespace implizit zu überspringen, wobei Whitespace außer Newlines übersprungen wird. Zum Beispiel (ist der Code nicht Test, aber ich denke, so etwas wie dies mit dem Bugs und Kompilierungsfehlern sollen entfernt arbeiten):
std::istream& my_ws(std::istream& in) {
std::istream::sentry kerberos(in);
while (isspace(in.peek())) {
if (in.get() == '\n') {
in.setstate(std::ios_base::failbit);
}
}
return in;
}
// ...
char name[64];
int array[12];
while (in >> std::setw(sizeof(name)) >> name) { // see (*) below
int* it = std::begin(array), end = std::end(array);
while (it != end && in >> my_ws >> *it) {
++it;
}
if (it != end && in) { deal_with_the_array_being_full(); }
else {
do_something_with_the_data(std::begin(array), it);
if (!in.eof()) { in.clear(); }
}
}
Meine persönliche Vermutung ist, dass die Zuordnung zum Lesen der Werte in char
Arrays gefragt, gefolgt von Umwandlung sie unter Verwendung atoi()
oder strol()
. Ich denke, das wäre eine langweilige Lösung für die Übung.
(*) Nie, nicht einmal in exmaple Code, verwenden Sie den formatierte Eingabe-Operator mit einem char
Array array
ohne auch die maximal zulässige Größe einstellen! Die Größe kann durch Einstellen der width()
des Streams eingestellt werden, z. B. unter Verwendung des Manipulators std::setw(sizeof(array))
. Wenn width()
0
ist, wenn der formatierte Eingabeoperator mit einem char
-Array verwendet wird, wird eine beliebige Anzahl von Nicht-Leerzeichen gelesen. Dies kann leicht Überlauf das Array und ein Sicherheitsproblem werden! Im Wesentlichen ist dies die C++ - Schreibweise von gets()
von C (die jetzt sowohl aus der C- als auch der C++ - Standardbibliothek entfernt wird).
Lookup ‚C++ CSV zu analysieren‘ (und haben einen Raum als Trennzeichen) –
@ DieterLücking Ich habe für eine lange Zeit zu lesen, und konnte es nicht TU es. Kannst du mir zeigen? – Gigata
* Ich weiß nicht, wie viele ganze Zahlen eingegeben werden * - * Hinweis: Ich kann nicht std :: string oder std :: vector * - Was ist, wenn es mehr als 12 ganze Zahlen in dieser Zeile gibt? – PaulMcKenzie