Hey ich wollte gerade eine eingabe einem Text und einer Zahl machen das er nacher wieder ausgegeben wird!
ich kenn bis jetzt
int für Zahlen
char für Buchstaben
string !?
ich kenn bis jetzt
int für Zahlen
char für Buchstaben
string !?
#include <iostream>
#include <string>
int main()
{
std::string string_variable;
std::cin >> string_variable ;
std::cout << string_variable;
return 0 ;
}
Mit Strings kann man rechnen?Quote:
In nem String kannst du soweit ich weiß jedes Zeichen welches der ASCII beinhaltet( du kannst also eigentlich alles außer evtl irgendwelche chinesischen schriftzeichen o.ä. darin einlesen ).Code:#include <iostream> #include <string> int main() { std::string string_variable; std::cin >> string_variable ; std::cout << string_variable; return 0 ; }
Zum rechnen solltest du aber weiterhin int ,float ,short,long u.a. verwenden ,da Strings für Text gedacht sind man kann glaube ich auch damit rechnen ,dadurch können aber viele Fehler entstehen.
int z1=10; int z2=10; std::cout<<(z1+z2);
std::string z1="10"; std::string z2="10"; std::cout<<(z1+z2);
#include <string>
using namespace std;
Warum?Quote:
Zusätzlich sollte man als Anfänger lieber noch globale namespaces verwenden
Blödsinn. Da er C++ verwendet, soll er auch std::string benutzen.Quote:
Prinzipiell, wenn du char bereits kennst und nichts neues lernen möchtest, kannst du auch einfach ein Array an chars nehmen, ein String ist nichts anderes.
Weil das nicht verwirrt, man muss sich nicht mit dem Thema namespaces außeinander setzen, man lernt einfach auswendig:Quote:
Warum?
Man sollte beide Varianten einmal gesehen und benutzt haben, für den Anfang ist es also durchaus ok, sich auch mit nicht C++ spezifischen Elementen zu befassen.Quote:
Blödsinn. Da er C++ verwendet, soll er auch std::string benutzen.
3. Man lernt die Sprache gleich richtig, anstatt sich hinerher zu plagen denQuote:
Weil das nicht verwirrt, man muss sich nicht mit dem Thema namespaces außeinander setzen, man lernt einfach auswendig:
"using namespace std;"
kommt immer oben hin.
Dabei muss man sich vorerst keine Gedanken darüber machen, was genau diese Zeile Code jetzt macht und erreicht damit ein klein wenig mehr Lust weiter zu lernen. Beim Programmieren am Anfang bin ich nämlich immer noch der Meinung, dass je schneller die Erfolge, desto eher bleibt man beim Programmieren. Später wird man sich sowieso Gedanken über einen guten/lesbaren Stil machen, spätestens wenn man die ersten großen Projekte schreibt.
Man könnte zwar auch auswendig lernen:
Vor jedes cin, cout, string, usw. kommt ein std::, das kann man aber
1. sehr schnell vergessen und dann fragt man sich warum es nicht funktioniert und
2. ist es mehr auswendig zu lernen, als diese eine Zeile.
std::string hat vermutlich einen größeren Overhead, aber mehr schon nicht, und beiQuote:
Abgesehen davon ist ein char-Array um einiges schneller in der Verarbeitung als ein Objekt der string Klasse.
Muss jeder für sich wissen, Fakt ist aber, dass am Anfang viele Leute an den extrem langsamen Erfolgen scheitern und ich deswegen immer Tipps gebe, wie man am ehesten ans Ziel kommt und nicht auf welchem Weg.Quote:
3. Man lernt die Sprache gleich richtig, anstatt sich hinerher zu plagen den
schlechten Stil wieder abzugewöhnen.
Solche Aussagen halte ich, wenn man den ersten Teil deiner Aussage ansieht, für total bescheuert.Quote:
std::string hat vermutlich einen größeren Overhead, aber mehr schon nicht, und bei
normalen Rechnern ist das sicher kein merklicher Unterschied.
Das ist als wolle man Autofahren lernen, sich aber nicht mit der Bremse auseinandersetzen.Quote:
man muss sich nicht mit dem Thema namespaces außeinander setzen, man lernt einfach auswendig:
Natürlich soll er auch wissen, was ein Array ist. Aber ihm raten, es zu benutzen, ist doch wirklich unsinnig.Quote:
Man sollte beide Varianten einmal gesehen und benutzt haben, für den Anfang ist es also durchaus ok, sich auch mit nicht C++ spezifischen Elementen zu befassen.
1. "premature optimization is the root of all evil"Quote:
Abgesehen davon ist ein char-Array um einiges schneller in der Verarbeitung als ein Objekt der string Klasse.
Sowas ist aber kein ausschlaggebender Faktor für Geschwindigkeit. Und da du dich scheints selber nur Hobbymäßig mit dem Programmieren beschäftigst (keineswegs böse gemeint), solltest du mit wilden Aussagen vorsichtig sein.Quote:
Richtigkeit sollte man also hauptsächlich an Geschwindigkeit und Speicherbedarf messen und nicht daran, ob man jetzt sprachspezifische Elemente verwendet hat oder nicht.
@BremsenQuote:
Das ist als wolle man Autofahren lernen, sich aber nicht mit der Bremse auseinandersetzen.
Wer Programmieren (gerade C++) lernen will, soll es mMn dann auch richtig tun. Und wenn es C++ sein soll(oft auch einfach nur, weils einem Anfänger direkt als uber-h4x0r-mächtige-Sprache angedreht wird; aber andere Baustelle), soll man sich nicht davor scheuen, sich mit allen Teilbereichen zu befassen.
Und auswendig lernen ist sowieso falsch, wenns ums Sprache lernen geht.
Natürlich soll er auch wissen, was ein Array ist. Aber ihm raten, es zu benutzen, ist doch wirklich unsinnig.
1. "premature optimization is the root of all evil"
Und das trifft ganz besonders auf sowas wie char[] statt std::string oder ++i statt i++ zu.
2. Muss deine Aussage nicht unbedingt richtig sein. Es ist laut Standard afaik nicht vorgeschrieben, dass sich der interne buffer auf dem Heap befinden muss - von Implementationen, wo kurze Strings auf dem Stack erstellt werden, hab ich auch schon gehört. Demnach fällt dieser größte Teil des Overheads schonmal weg. Durch Optimierungen sollten String-Operationen dann kaum bis garnicht langsamer sein, wie die C-Funktionen, die auf char-Arrays angewendet werden. Wenns ideal verläuft, werden die Methoden von std::string, die dann ggf. auch nichts anderes als strlen, strcat usw. aufrufen, einfach inlined -> 0 Overhead.
Ausserdem sorgen unter C++11 die move semantics für noch mehr Neutralisation des Overheads.
Gruß
Nochmal: Das ist premature optimization und einfach Scheiße. Les dir mein Edit vom Post davor durch, dann siehtst du warum.Quote:
@String
Kaum langsamer und kaum Overhead ist trotzdem noch größer 0.
Ich zitiere:Quote:
Wenn dein Programm so schnell wie möglich laufen soll, dann benutze gefälligst C. Falls du es nicht gemerkt hast, ist C++ insgesamt minimal (!) langsamer als C, dafür jedoch wesentlich, wirklich wesentlich, komfortabler.
Benutzt du auch lieber printf statt cout? Oh man..
C und C++ sind in den Standardelementen genau gleich schnell!!!Quote:
Printing 150,000 "Hello, World!"s (without using endl) takes about -
90ms for printf(), 79ms for cout.
Printing 150,000 random doubles takes about -
3450ms for printf(), 3420ms for cout.
int i=10; int a=200; int b=a+i;
Nicht umsonst wird das bei vielen Spielen und Zeitkritischen Sachen auch gemacht.Quote:
Nochmal: Das ist premature optimization und einfach Scheiße. Les dir mein Edit vom Post davor durch, dann siehtst du warum.
Wenns dir auf jeden Takt ankommt, benutze Assembler.
Natürlich wird das da gemacht. Programmiert er hier etwas zeitkritisches? Wie schon angedeutet, arbeite ich auch mit µCs und weiß sehrwohl, dass es oft auf jedes einzelne Bit ankommt. Aber wir sind hier an Desktoprechnern und man benutzt keine Sprache wie C++, um dann auf all die tollen Vorzüge zu verzichten.Quote:
Nicht umsonst wird das bei vielen Spielen und Zeitkritischen Sachen auch gemacht.