Datei lesen und in array speichern
-
Gutan Tag,
mein Problem sieht läßt sich so schildern:ahl
in einer Textdatei stehen Zahlen, getrennt durch eine unterschiedliche Anzahl von Leerzeichen und durch das Zeilenende an sich.
20 55 66 843 45 998666 4 334 667 68 778 45454 44 2234234 233222Nun möchte ich die Zahlen statt in einem string-Array zu speichern in einem integer array speichern.
Dabei gibt die erste zahl (zahl im Feld 0 des buffers) die größe des zu erstellenden Int-Arrays( beispielsweise '20') an.bisher:
- erste Zeile mit getline ausgelesen
- leerzeichen entfernt
- Zahlen wurden als Strings in ein Array gebuffertim Feld 0 des buffers liegt als String die zahl ('20')
buch.field[0] // hier liegt die zahl 20Wie gelingt es mir nun ein Array mit der Größe des Inhaltes von buch.field[0] zu erstellen?
Bisher habe ich folgendes versucht:
int laenge = static_cast<int>(buch.field[0]); int iarray[laenge];das ging zum einen schief da mit static_cast er Probleme hatte den string in einen Integer umzuwandeln. Und zum anderen die initialisierung des Arrays währed der Laufzeit.
[/code]
:xmas1:
-
Hallo,
Schau mal in die FAQ.
String in Zahl umwandeln
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html
Das darauffolgende Array mußt du dynamisch erstellenint* iarray = new int[laenge]; // delete[] nicht vergessenBesser ist es du nimmst gleich std::vector (siehe Magazin).
-
hmm am einfachsten so:
std::ifstream file_stream("data.dat"); if (!file_stream) throw std::runtime_error("could not open file!"); std::size_t data_count(0); if (!(file_stream >> data_count)) throw std::runtime_error("invalid file"); std::vector<int> vec_data(data_count); std::copy(std::istream_iterator<int>(file_stream), std::istream_iterator<int>(), vec_data.begin());... in vec_data sollte danach stehen, was du haben willst.
-
Noch eine kleiner patch um die Länge des Integerfeldes zu bekommen
int* iarray = new int[strlen(iarray)+1];
// delete[] nicht vergessen
-
AJA schrieb:
Noch eine kleiner patch um die Länge des Integerfeldes zu bekommen
int* iarray = new int[strlen(iarray)+1];
// delete[] nicht vergessenUnd was soll das bringen - außer undefiniertem Verhalten? Du rufst strlen() mit einem (noch) nicht initialisierten Zeiger auf und nutzt dann dessen Ergebnis, um eben diesen Zeiger zu initialisieren.