Wort für Wort ?
-
Gut, fehler gefunden. hilft aber net...:
#include <iostream> #include <cstdio> #include <fstream> #include <string> using namespace std; int main() { int a=0; int i=0; string wort[a]; ifstream in("datei.txt"); while(in>>wort[a]) { a++; } for(i=0;i<a;i++) { cout<<wort[i]; } getchar(); }
funzt genauso wenig...
-
du hast nur einen Fehler gefunden...
Tip: Dein Array ist zu klein.
"funzt nicht" ist übrigens eine sehr präzise Problembeschreibung.
-
Funzt nicht == tut nicht das was ich will...reicht aus!
Und wieso ist mein array zu klein? Es ist am anfang auf 0, aber sobale ich was einlese vergrössere ich es doch!? oh mann...Ich blick da net durch
-
Funzt nicht == tut nicht das was ich will...reicht aus!
Nein, in der Regel nicht.
aber sobale ich was einlese vergrössere ich es doch!?
Nein, wie kommst du darauf? Dafür bräuchte man dann einen vector o.ä. Schau nochmal in dein Buch oder so.
-
#include <iostream> #include <cstdio> #include <fstream> #include <string> using namespace std; int main() { int a=1; int i=0; string wort[a]; ifstream in("datei.txt"); while(in>>wort[a]) // HIER LESE ICH EIN! { a++; //UND HIER WIRD a GRÖSSER UND SOMIT DAS ARRAY !??? } for(i=0;i<a;i++) { cout<<wort[i]; } getchar(); }
Sorry aber der mist geht mir grad tierisch auf die eier! Wenn ich wort[100] mache ist bei 100 wörtern schluss, und genau das will ich vermeiden!!!!
-
So ein primitives Array, ist nicht dynamisch. Das' ja das blöde an Arrays.
Mit einem Vector sähe das so aus:
vector<string> woerter; for(string wort; in >> wort; ) woerter.push_back(wort); } .. cout<< woerter[i] ...
-
wurde dir doch schon gesagt wie du das problem lösen kannst...
schau dir z.b. mal std::vector an
mit der operation push_back fügst du immer ein element weiter an.. arbeiten kannst du mit dem teil an sonsten wie mit einem array nur das du den vorteil hast das du dich nicht um die speicherverwaltung kümmern musst...[edit]
da war wohl einer schneller
[/edit]
-
Der Wixxer schrieb:
//UND HIER WIRD a GRÖSSER UND SOMIT DAS ARRAY !???
(caps lock klemmt bei dir anscheinend)
nein.btw, bevor ich antworte:
auch fünf rufzeichen helfen niemanden, dein problem besser zu verstehen. Folgendes durchlesen: http://www.catb.org/~esr/faqs/smart-questions.html
Alle Beiträge durchlesen.DrGreenthumb schrieb:
Schau nochmal in dein Buch oder so.
so.
was du jetzt tun kannst, ist eine art dynamisches array verwenden
(DrGreenthumb schrieb:
einen vector o.ä.
)
#include <iostream> #include <cstdio> #include <fstream> #include <string> #include <vector> using namespace std; int main() { ifstream in("datei.txt"); string wort; vector<string> woerter; while(in>>wort) // HIER LESE ICH EIN! { woerter.push_back(wort); //UND HIER WIRD a GRÖSSER UND SOMIT DAS ARRAY . } for(int i=0; i < woerter.size(); i++) { cout<<wort[i]; } getchar(); //darauf lieber verzichten }
Alternativ auch mit iteratoren
#include <iostream> #include <string> #include <vector> #include <iterator> using namespace std; int main() { vector<string> woerter; copy (istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(woerter)); copy (woerter.begin(), woerter.end(), ostream_iterator<string> (cout, "\n")); }
-
Warum nicht gleich beim konstruieren des vector mit einlesen? Das spart nochmal ne Zeile.
-
Jester schrieb:
Warum nicht gleich beim konstruieren des vector mit einlesen? Das spart nochmal ne Zeile.
Ich finde auch, dass die STL manches Mal dazu verleitet absolut unlesbaren Code zu erzeugen. Aber ansonsten ist sie ganz praktisch.
MfG SideWinder
-
du, wenn man sich dran gewöhnt...
und den vector hab ich nur gelassen, weil ich mit copy&paste gearbeitet hab