Stringlänge berechen
-
lolalter schrieb:
Was ist denn das schon wieder für ein Müll?
Keine Ahnung was man dazu noch sagen soll. Gibt's in Deinem Hirn irgendeine Sperre gegen neues Wissen oder warum machst Du null Fortschritte?
Vielen Dank für die hilfreiche Antwort auf meine Frage.
-
Was ist denn an meinem Code denn schon wieder so blödsinnig???????
-
silent_max schrieb:
Was ist denn an meinem Code denn schon wieder so blödsinnig???????
Alles. Einfach alles.
Du behandelst std::strings wie char-Arrays und denkst das wäre dann C++. Es fällt Dir nichtmal auf, dass Dein eingegebener Text (in die gleichnamige string Variable) nix mit den Zeigern zu tun hat.
-
Im Buch Coding for Fun mit C++ wird der Unterschied zwischen
String-Bearbeitung mit Zeiger(C-String) und Arrays(std::string)
an einem Beispiel erläutert.0x0ERROR
-
Nicht nur, dass du const char* nicht von std::string* unterscheiden kannst. Auf was, denkst du, zeigt temp? (Tipp: Es zeigt auf das gleiche wie str1.)
-
lolalter schrieb:
Keine Ahnung was man dazu noch sagen soll.
Ich auch nicht. Er scheint nicht verstanden zu haben, was
- char
- std::string
- Zeiger
sind und dass man Zeiger z.B. auch mit einer gültigen Adresse initialisieren muss, bevor man sie dereferenziert oder inkrementiert.std::string Text = "foo"; std::cout << Text.length() << std::endl; // ^^^^^^silent_max schrieb:
Was ist denn an meinem Code denn schon wieder so blödsinnig???????
An dem string-Dingen? Alles. Von vorn bis hinten.
-
also ich kann es absolut nicht nachvollziehen, dass meine vorredner dich so niedermachen, und das auch noch auf diese art und weise...
du hattest ja jetzt schon so einen thread aufgemacht, wo du gefragt hast, ob du überhaupt weiterprogrammieren sollst.
und ich glaube, der konsens war, dass aufgeben nicht drin ist.
d.h. du bist vielleicht vom fachwissen (noch) nicht so gut, aber das kommt baldzum problem:
du mischst C-Strings und std::string vom prinzip. und dann bringst du auch noch zeiger rein. Ich kommentier das mal#include <iostream> #include <string> using namespace std; // blabla standard includes usw... int main() { string Text; // ok, ein string Text, den du unten eingibst string *str1; // ok, du hast einen zeiger auf einen std::string, wofür? mh, vielleicht sehen wir das gleich string *temp = str1; // oh, noch ein zeiger auf einen string, der direkt auf den ersten string zeiger zeigt (macht nur keinen sinn, denn dieser ist noch unbelegt -> undefined behaviour) int sl = 0; // ein int ok, name nicht so gut gewählt, aber das ist sekundär cout << "Geben Sie einen Text ein!\n"; getline (cin, Text); // hier gibst du den string ein, ok! while(*temp) // hier hantierst du mit dem zweiten stringzeiger, der eigentlich auch nicht initialisiert ist -> hier kann man nicht vrhersehen was passiert { ++sl; // du erhöhst den int zähler ok ++temp; // du inkrementierst den string zeiger -> undef behaviour } cout << "Ihr Text " << str1 << " hat " << sl << " Buchstaben!\n"; // das stimmt nicht so ganz, dennd er eingegebene text war Text und nicht str1. und was hier rauskommt ist vollkommen zufällig (fast) return 0; }wenn du bei dem code in zeile das hier schreibst, könnte es klappen (auf den ersten blick):
string *str1 = Text.c_str();
-
Skym0sh0 schrieb:
d.h. du bist vielleicht vom fachwissen (noch) nicht so gut, aber das kommt bald
Nö. Auf dem "Niveau" programmiert er seit bald einem Jahr.
Schau Dir seine alten Beiträge an, dann weißt Du warum viele nur noch angenervt sind.Lust auch was er im elektronik-kompendium so schreibt. In Sachen Elektronik scheint er trotz Ausbildung ebenso wenig durchblick zu haben und kriegt dort das gleiche zu hören wie hier.
-
Du solltest wissen, dass man nicht alle Variablen gleich behandeln kann! Das geht nur, wenn sie vom gleichen Typ sind!
=> std::string != char, int != std::string, bool != int, usw.Wenn du nicht weißt, wie du einen Typ behandeln sollst, du aber weißt, was du erreichen willst, dann schau in einer Reference nach!
http://www.cplusplus.com/reference/string/string/Deine Aufgabenstellung ist:
-Benutzer soll einen Text eingeben
-Programm gibt Länge (Anzahl der Zeichen) ausSo, den ersten Schritt, die Eingabe, hast du.
Jetzt schauen wir doch mal in der Reference nach, wie wir die Länge eines std::string rausfinden kann. Beste Lösung wäre eine Funktion der Klasse std::string, die das automatisch macht, ansonsten müssen wir nach umwegen schauen.
Aber, siehe da:size()
Return length of string (public member function)Super! Es gibt eine Funktion, die uns die Länge sagt. Schauen wir uns mal den Beispielcode der Reference an:
// string::size #include <iostream> #include <string> using namespace std; int main () { string str ("Test string"); cout << "The size of str is " << str.size() << " characters.\n"; return 0; }Jetzt bist du in der Lage (musst du in der Lage sein), das auf deine Aufgabenstellung anzuwenden!
@alle Flamer
Wenn ihr nicht produktiv helfen könnt, dann lasst es bitte sein. Das hilft euch nicht und dem silent_max erst recht nicht.
Gruß und guten Rutsch ins neue Jahr!

-
Skym0sh0 schrieb:
string *temp = str1; // oh, noch ein zeiger auf einen string, der direkt auf den ersten string zeiger zeigtEr zeigt auf das, auf das str1 zeigt. Würde er auf str1 zeigen, wäre das kein UB. (Dafür sollte es allerdings ein string** sein.) (Sinnlos wäre es allerdings trotzdem.) Bitte auf korrekte Formulierung achten, das verwirrt ihn sonst doch nur noch mehr.
Skym0sh0 schrieb:
wenn du bei dem code in zeile das hier schreibst, könnte es klappen (auf den ersten blick):
string *str1 = Text.c_str();
Was soll das denn sein?CreativeLabs schrieb:
Nö. Auf dem "Niveau" programmiert er seit bald einem Jahr.
Setz lieber das "programmiert" in Anführungsstriche.
-
oh, ja jetzt wo dus sagst. irgendwie war ich vorhin selbst brain-afk.
so gehts natürlich nicht, da hat cooky recht
-
kralo9 schrieb:
Jetzt bist du in der Lage (musst du in der Lage sein), das auf deine Aufgabenstellung anzuwenden!
Hier die Lösung:
#include <iostream> #include <string> using namespace std; int main() { string str; cout << "Bitte geben Sie einen Text ein!\n"; getline(cin, str); cout << "Ihr Text hat " << str.size() << " Buchstaben\n"; return 0; }CreativeLabs schrieb:
Nö. Auf dem "Niveau" programmiert er seit bald einem Jahr.
Schau Dir seine alten Beiträge an, dann weißt Du warum viele nur noch angenervt sind.Willst Du mir jetzt die Schuld dafür geben, dass ich es von der Schule aus so lerne???
Nur damit ich es verstanden habe...
C-Strings, also alles was mit char zu tun hat, kann man nicht auf C++ - String, also alles was mit string, projeziern?? Also sind char und string zwei total verschiedene Dateitypen?? Also kann man bei C++ strings rein gar nichts machen, was mit C Strings zu tun hat und umgekehrt??
Ich weiß nicht, wer das gesagt hat, aber neulich gab es die Meldung, dass alles, was in C möglich ist, ist auch in C++ möglich. Also habe ich daher gedacht, dass alles, was mit charmöglich ist, ist auch mit string möglich. Oder liege ich mal wieder daneben???
-
silent_max schrieb:
C-Strings, also alles was mit char zu tun hat, kann man nicht auf C++ - String, also alles was mit string??
Ja. Das gilt eigentlich immer, dass man nicht einfach so Operationen von einem Datentyp auf einen anderen anwenden kann.
Ich weiß nicht, wer das gesagt hat, aber neulich gab es die Meldung, dass alles, was in C möglich ist, ist auch in C++ möglich.
Das stimmt ja auch, du kannst in C++ auch mit C-Strings arbeiten.
-
silent_max schrieb:
Nur damit ich es verstanden habe...
C-Strings, also alles was mit char zu tun hat, kann man nicht auf C++ - String, also alles was mit string, projeziern?? Also sind char und string zwei total verschiedene Dateitypen?? Also kann man bei C++ strings rein gar nichts machen, was mit C Strings zu tun hat und umgekehrt??
kralo9 schrieb:
Du solltest wissen, dass man nicht alle Variablen gleich behandeln kann! Das geht nur, wenn sie vom gleichen Typ sind!
=> std::string != char, int != std::string, bool != int, usw.Hab dich darauf doch schon hingewiesen!
Edit: Dir wurde auch empfohlen, jede einzelne Codezeile zu kommentieren und zu schreiben, was du mit dieser Zeile erreichen willst! Mach das auch!
-
silent_max schrieb:
Nur damit ich es verstanden habe...
C-Strings, also alles was mit char zu tun hat, kann man nicht auf C++ - String, also alles was mit string, projeziern?? Also sind char und string zwei total verschiedene Dateitypen?? Also kann man bei C++ strings rein gar nichts machen, was mit C Strings zu tun hat und umgekehrt??
Ich weiß nicht, wer das gesagt hat, aber neulich gab es die Meldung, dass alles, was in C möglich ist, ist auch in C++ möglich. Also habe ich daher gedacht, dass alles, was mit charmöglich ist, ist auch mit string möglich. Oder liege ich mal wieder daneben???
string in c++ ist im Grunde eine Klasse, kein Datentyp wie z.B. ein Char.
(Zumindest sollte man das als Anfänger zum Lernen so handhaben.)
Deswegen kann man mit Strings nicht das Gleiche machen wie mit Chars.Wenn Du die genaue Funktionsweise von Strings verstehen möchtest, braucht man die Grundlagen zum Thema Klassen.
Dann kann man sich mal anschauen, wie die Klasse String aufgebaut ist.
Oder sie vielleicht sogar selber in vereinfachter Form programmieren.
In der Regel macht es dann auch *Klick*.
-
kralo9 schrieb:
Du solltest wissen, dass man nicht alle Variablen gleich behandeln kann! Das geht nur, wenn sie vom gleichen Typ sind!
=> std::string != char, int != std::string, bool != int, usw.Wenn du nicht weißt, wie du einen Typ behandeln sollst, du aber weißt, was du erreichen willst, dann schau in einer Reference nach!
http://www.cplusplus.com/reference/string/string/Deine Aufgabenstellung ist:
-Benutzer soll einen Text eingeben
-Programm gibt Länge (Anzahl der Zeichen) ausSo, den ersten Schritt, die Eingabe, hast du.
Jetzt schauen wir doch mal in der Reference nach, wie wir die Länge eines std::string rausfinden kann. Beste Lösung wäre eine Funktion der Klasse std::string, die das automatisch macht, ansonsten müssen wir nach umwegen schauen.
Aber, siehe da:size()
Return length of string (public member function)Super! Es gibt eine Funktion, die uns die Länge sagt. Schauen wir uns mal den Beispielcode der Reference an:
// string::size #include <iostream> #include <string> using namespace std; int main () { string str ("Test string"); cout << "The size of str is " << str.size() << " characters.\n"; return 0; }Jetzt bist du in der Lage (musst du in der Lage sein), das auf deine Aufgabenstellung anzuwenden!
@alle Flamer
Wenn ihr nicht produktiv helfen könnt, dann lasst es bitte sein. Das hilft euch nicht und dem silent_max erst recht nicht.
Gruß und guten Rutsch ins neue Jahr!

Wie kommst Du über die C++ Reference auf den C++ String? Denn wenn ich bei C++ Reference nach C Strings suche, dann finde ich bloß C Strings.
-
silent_max schrieb:
Ich weiß nicht, wer das gesagt hat, aber neulich gab es die Meldung, dass alles, was in C möglich ist, ist auch in C++ möglich. Also habe ich daher gedacht, dass alles, was mit charmöglich ist, ist auch mit string möglich. Oder liege ich mal wieder daneben???
Du kannst ja auch mit C-Strings dasselbe machen, wie mit std::string aus C++.
In dem Sinne, dass Du
sie ausgeben kannst,
die Länge ermitteln kannst,
sie nach Inhalten durchsuchen kannst,
usw. usw.Aber:
Du kannst es nicht auf die selbe Art und Weise tun! Wie Du die einzelnen Aufgaben erledigst, unterscheidet sich schon.
Du kannst also nicht eine Aufgabe mit einem C-String erledigen, danach einfach die Variablendeklaration von char * auf std::string ändern, den Rest unverändert belassen und dann erwarten, dass alles funktioniert!
Genausowenig natürlich umgekehrt.
-
silent_max schrieb:
Wie kommst Du über die C++ Reference auf den C++ String? Denn wenn ich bei C++ Reference nach C Strings suche, dann finde ich bloß C Strings.

Ähm, du willst die Reference zu "String" nicht zo "C-String"...
Suchmaschinen benutzen ist doch einfach! Such nach dem was du willst und nicht nach dem was du nicht wissen willst..Da stellst du dich jetzt blöd an.. Wenn du nicht nach "c++ string" suchst, bekommst du es auch nicht. Wenn du zwei Kugeln Schokoladeneis bestellst bekommst du auch keine zwei Kugeln Vanille..
-
kralo9 schrieb:
Ähm, du willst die Reference zu "String" nicht zo "C-String"...
Suchmaschinen benutzen ist doch einfach! Such nach dem was du willst und nicht nach dem was du nicht wissen willst..Die C++ Bibliotheken bzw. Funktionen werden ja unter der Rubrick "Other" geführt... Jetzt geht mir (endlich) ein kleines Licht auf...
-
silent_max schrieb:
Willst Du mir jetzt die Schuld dafür geben, dass ich es von der Schule aus so lerne???
Man kann auch außerhalb von der Schule lernen.(Internet,Bücher,etc.)
0x0ERROR