Einlesen einzelner Ziffern
-
Slabic schrieb:
Naja, C ist auch C++. ^^
Du meinst wohl eher, dass Teile von C in C++ enthalten sind. Die beiden Sprachen sind nicht 100% kompatibel. C++ Code lässt sich zudem auf einem C Kompiler gar nicht kompilieren

Dokumentation zu den IO Streams in C++:
http://www.cplusplus.com/reference/iostream/Dokumentation zu std::getline:
http://www.cplusplus.com/reference/string/Grüssli
-
Ja, auf diese von dir genannten Seiten stoße ich andauernd und sie stressen mich viel mehr, als dass sie mir helfen.
-
Slabic schrieb:
Ja, auf diese von dir genannten Seiten stoße ich andauernd und sie stressen mich viel mehr, als dass sie mir helfen.
Bei getline habe ich dabei Probleme damit, zu verstehen, was wie genau der String ist und wie, wo, was aus der Datei gespeichert wird und wie ich den String, in dem meine Daten dann sind, genau verwende....
schon mal versucht, nen C++ Buch zu kaufen?
ich kanns dir zwar hier hinschreiben, aber das wird dir nix nützen:#include <fstream> //std::fstream #include <string> //std::string #include <iostream> //std::cin + std::cout + std::endl #include <vector> //std::vector #include <stdexcept>//std::invalid_argument int main() { std::string dateiname; std::cout << "dateiname eingeben" << std::endl; std::getline (std::cin, dateiname); std::fstream stream (dateiname); std::vector <int> zahlen; for(char tmp; stream >> tmp; ) { int toAdd = tmp-'0'; if ((toAdd > 9) || (toAdd < 0)) throw std::invalid_argument ("keine ziffer"); zahlen.push_back (toAdd); } for (std::vector<int>::const_iterator i(zahlen.begin()), e(zahlen.end()); i != e; ++i) std::cout << *i; std::cout << std::endl; }bb
-
zeig uns mal deinen Code und wie der Dateininhalt aussieht den du hast. Ich persönlich probiere immer gern aus wenn ich nicht 100%ig weiß was eine Funktion genau ergibt. Hast du mit getline() schon etwas rumgespielt? (btw, es gibt auch noch den operator>> um etwas aus einem Stream zu bekommen).
Ich verstehe auch deine Ungeduld, du möchtest dein Programm zum Laufen bringen und es hapert "nur" am Einlesen. Jetzt Zeit zu investieren ist nervig - aber es lohnt sich, schließlich lernst du dabei was was du auch später noch öfters brauchen wirst

-
@unskilled
danke, aber in der Tat bringt's nicht soviel ^^JIPPIE, hab's jetzt endlich hingekriegt!!
Man,man...ja, echt ärgerlich wenn das einlesen einen so lange aufhält ^^
Naja, danke an alle.
Werde demnächst sicherlich desöfteren hier fragen stellen. ^^
-
Slabic schrieb:
Ja, auf diese von dir genannten Seiten stoße ich andauernd und sie stressen mich viel mehr, als dass sie mir helfen.
Die sind aber sehr nützlich. www.cplusplus.com ist ein gutes Nachschlagewerk, was die C++-Standardbibliothek betrifft. Du solltest dir die Zeit nehmen, die Artikel zu den verwendeten Klassen und Funktionen zu lesen...

-
Dravere schrieb:
C++ Code lässt sich zudem auf einem C Kompiler gar nicht kompilieren

Doch, wenn er nur aus C übernommene Funktionen benutzt, dann schon! :p
(bis auf wenige Ausnahmen natürlich...)
-
Noch eine kleine Frage.
Dazu find' ich in der C++-reference irgendwie nichts.Wie kann ich einzelne Ziffern einer großen Zahl einlesen und in eine int-Variable speichern?
In der Reference wird immer nur ein Char eingelesen...
-
Musst du die Ziffern einzeln einlesen? Wenn nicht, kannst du den
operator>>auch fürintbenutzen, um gleich ganze Zahlen einzulesen. Falls doch, wäre std::istream::get() vielleicht was.
-
Naja, ich will die Summe aller Ziffern der Zahl 2^1000 bestimmen.
Get und Getline, wollen ein Char. Das ist mein Problem.
-
Das Problem besteht noch.
Würde mich über jede Hilfe freuen.
-
Slabic schrieb:
Naja, ich will die Summe aller Ziffern der Zahl 2^1000 bestimmen.
ähm. nee.
die quersumme von 2^1000 ist ein programmiertechnisches problem, das du erst in ca einem halben jahr angehen solltest.der weg ist wohl:
baue eine klasse BigUInt, die intern ein char-array hat und als lange zahl denkt. baue eine methode verdoppeln, die halbschriftlich mit 2 multipliziert. rufe die funktion 1000-mal auf. baue eine funktion quersumme, die über das char-array läuft. und gib das aus. kannst die klassenkacke auch weglassen und char[10000] nehmen, weil du mathematisch abschätzen kannst, daß der platz reicht.
-
Ok, so in etwa hatte ich mir das gedacht.
Aber, die Zahl habe ich mir schon von Mathematica bestimmen lassen.
Jetzt bräuchte ich nur noch das Ziffernweise einlesen...^^
-
Slabic schrieb:
Ok, so in etwa hatte ich mir das gedacht.
Aber, die Zahl habe ich mir schon von Mathematica bestimmen lassen.
Jetzt bräuchte ich nur noch das Ziffernweise einlesen...^^das geht dann ganz schnell.
int summe=0; ifstream in("zahl.txt"); char ch; while(in>>ch) summe+=(ch-'0') return summe;edit: noch testen, ob Mathematica \n\r oder sowas dranbaut mit 2^10==1024. wenns damit klappt und Mathematica keine zeilenumbrüche einfügt, sollte es klappen.
teste zusätzlich das ergebnis nochmal, indem du die letze ziffer prüfst, alsoint x=1; for(int i=1;i<1000;++i) x=x*2%10;wenn die auch stimmt, sollte alles ok sein.
-
Wunderbar, danke.
Das Ergebnis ist richtig.
P.s. So ähnlich hatte ich das auch gemacht gehabt, nur statt '0', 48 geschrieben gehabt, was aber irgendwie nicht ging. Evtl. irgendwo vertan.
Kannst du mir vielleicht noch hier helfen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-238451.html
-
Slabic schrieb:
nur statt '0', 48 geschrieben gehabt, was aber irgendwie nicht ging.
woanders war das fehlerchen. 48 ist genausogut wie '0'. die '0' hat allein den vorteil, daß man die ascii-tabelle nicht im kopf haben muß.