Frage zu new
-
Hallo ich schreibe gerade ein einfach Programm wo eine eingabe gemacht wird und diese eingabe wird dann rückwärts in eine Datei gespeichert:
Beispiel:
Eingabe = 123
Ausgabe = 321Die Variable var würde hier gerne Dynamisch machen.
Nun meine Frage was ist besser:Das so zu lösen:
char *var; var = new char [length]; oder so ? char var[] = "NULL"; // Ist doch so auch Dynamisch oder ?void encrypt( string crypt ) { int length = 0; //char var[] = "NULL"; char * var; length = crypt.length(); var = new char [length]; ofstream encrypt_file ( "encrypt.txt"); cout<<endl<<endl; for (int i = crypt.length() ; i > 0 ; i--) { var[i] = crypt[i-1]; encrypt_file << var[i]; cout << var [i]; } encrypt_file.close(); }
-
also am besten ist:
#include <string> int main() { std::string input; std::cin >> input;Wenn du string nicht verwenden darfst(oder nicht willst - wieso auch immer), dann über new[] (und das zugehörige delete[] nicht vergessen).
char var[] = "NULL"; // Ist doch so auch Dynamisch oder ?
nein
dort hast du nur einen zeiger auf ein (unter umständen nicht beschreibbares) stück speicher, mit dem Inhalt {'N', 'U', 'L', 'L', '\0'}Wenn es dir nur um die Funktionalität geht, dann geht das mit 2 Zeilen ganz einfach:
#include <algorithm> #include <iostream> #include <string> int main() { using namespace std; string input; cin >> input; string output(input); reverse(output.begin(), output.end()); cout << output; }bb
edit: code war falsch^^
-
Ist dieser Code schneller als die Lösung mit der For Schleife oder warum bevorzugst du denn ?
Ich glaub ich guck mir das morgen mal in OllyDbg an.
#include <algorithm> #include <iostream> #include <string> int main() { using namespace std; string input; cin >> input; string output(input); reverse(output.begin(), output.end()); cout << output; }
-
langsamer ist er sicherlich nicht
ich bevorzuge ihn, weil es eben sehr übersichtlich ist und wenig platz für fehler ist.
und warum das rad neu erfinden?bb
-
Man muss das Rad nicht neu erfinden aber vielleicht kann man es verbessern ?
Wenn man verstanden hat wie das Rad genau funktioniert schadet es auch nicht.
Vielleicht kann einem das wissen irgendwann mal nützlich sein.^^
-
verschlüssler schrieb:
Man muss das Rad nicht neu erfinden aber vielleicht kann man es verbessern ?
glaub ich kaum
Wenn man verstanden hat wie das Rad genau funktioniert schadet es auch nicht.
das ist deine meinung - ich muss nicht wissen, was intern passiert, wenn ich eine datei öffnen möchte. und was bei algorithmen passiert, sagt einem der name schon, wenn nciht, dann:
http://www.cplusplus.com/reference/
dort steht immer so was, wie: "works like {c++-code}" oder so was in der richtungVielleicht kann einem das wissen irgendwann mal nützlich sein.^^
naja - da ist reverse wohl gerade ein doofes beispiel, weil das wohl jeder weiß... aber zum bsp. ist es recht unnütz, wenn ich weiß, wie random_shuffle funktioniert - es reicht, wenn ich weiß, dass es eine zufällig reihenfolge erzeugt...
bb
-
Ah - auf eine solche Menge von Allgemeinplätzen/Totschlagargumenten muss ich einfach antworten.

verschlüssler schrieb:
Man muss das Rad nicht neu erfinden aber vielleicht kann man es verbessern ?...
Wer? Du?
verschlüssler schrieb:
...Wenn man verstanden hat wie das Rad genau funktioniert schadet es auch nicht...
Weißt Du, wie ein Rad funktioniert?
oder printf() ? Oder was beim Einstecken eines USB-Sticks passiert? Oder wie Deine Steuererklärung bearbeitet wird ? ...verschlüssler schrieb:
...Vielleicht kann einem das wissen irgendwann mal nützlich sein.^^
Du musst anfangen, alte Tetrapacks zu sammeln! Das könnte Dir irgendwann mal mützlich sein.
:p

Es gibt so viel da draußen, wofür man seine Zeit/Energie einsetzen könnte (Heilmittel gegeb Krebs finden, Weltfrieden herstellen, Hunger bekämpfen, std::string kennenlernen, ...), dass man seine Zeit vielleicht auf weniger abgegrasten Weiden verbringen sollte.
Gruß,
Simon2.
-
unskilled schrieb:
das ist deine meinung - ich muss nicht wissen, was intern passiert, wenn ich eine datei öffnen möchte.
Naja, das ist ein komplexes Thema. Das schadet nicht da etwas tiefer einzutauchen da man schon lernt besseren Code zu schreiben.
zB wo der Unterschied fstream, open und mmap ist.
ist es recht unnütz, wenn ich weiß, wie random_shuffle funktioniert - es reicht, wenn ich weiß, dass es eine zufällig reihenfolge erzeugt...
Und dann kommt sowas raus: http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html

Ne ne ne. Das Rad hin und wieder neuzuerfinden ist genau das was man braucht. Natürlich dennoch in production code hier reverse() verwenden, keine Frage. Aber mir gefällt diese Einstellung hier nicht: "das muss man nicht wissen".
-
Simon2 schrieb:
Weißt Du [...] wie Deine Steuererklärung bearbeitet wird ?
Da wären wir wieder bei random_shuffle.

-
unskilled schrieb:
char var[] = "NULL"; // Ist doch so auch Dynamisch oder ?
nein
dort hast du nur einen zeiger auf ein (unter umständen nicht beschreibbares) stück speicher, mit dem Inhalt {'N', 'U', 'L', 'L', '\0'}Falsch. Es ist zwar keine dynamische Speicher Reservierung, aber auf dem Stack wird Speicher für das Array reserviert, die Menge wird zur Kompilierzeit festgelegt.
varist somit ohne Probleme beschreibbar.varist auch kein Zeiger sondern ein Array von der Grösse 5.Und zum Thema Rad neu erfinden oder nicht:
Ich denke, dass es wichtig ist, dass jemand interesse für die unbekannten Bereiche zeigt und somit manchmal sich an einem eigenen Rad probiert. Man muss nicht alles wissen, aber immerhin mal in der Umgebung seines Tellers ein wenig reingeschnuppert haben, schadet nicht
Grüssli