Zeichenkette in Array "einlesen"/übertragen
-
@Encelave sagte in Zeichenkette in Array "einlesen"/übertragen:
Warum liest du nicht gleich nach array ein?
char array[] = {"wunderschoen"}; cin >> array;
Ok, ist blöd, wenn da was anderes als 12 Zeichen eingibst.
char array[1000]; cin >> array;
Dann gibt es aber Probleme mit dem sizeof(array), da das dann 1000 ist. Besser ist da
strlen
Dasstrlen
gibt aber die Anzahl der Zeichen an, währendsizeof
die Größe angibt.
In deinem Originalcode ist strlen(array) 12, sizeof(array) 13.Besser du arbeitest mit
std::string
.
-
Darüber hinaus ist "array" bereits ein Schlüsselwort, weshalb es hier auch blau hervorgehoben ist. Also besser die Namensgebung auch noch anpassen
-
@It0101 sagte in Zeichenkette in Array "einlesen"/übertragen:
Darüber hinaus ist "array" bereits ein Schlüsselwort, weshalb es hier auch blau hervorgehoben ist. Also besser die Namensgebung auch noch anpassen
Ist es nicht. Ich mag blau eingefärbte Arrays nicht.
-
@spiri sagte in Zeichenkette in Array "einlesen"/übertragen:
@It0101 sagte in Zeichenkette in Array "einlesen"/übertragen:
Darüber hinaus ist "array" bereits ein Schlüsselwort, weshalb es hier auch blau hervorgehoben ist. Also besser die Namensgebung auch noch anpassen
Ist es nicht. Ich mag blau eingefärbte Arrays nicht.
-
@It0101 https://en.cppreference.com/w/cpp/keyword
Aber wir wissen, was du meinst
-
@out sagte in Zeichenkette in Array "einlesen"/übertragen:
@It0101 https://en.cppreference.com/w/cpp/keyword
Aber wir wissen, was du meinstGenau genommen habt ihr natürlich recht. Ein Schlüsselwort ist es nicht. Verwenden sollte man es trotzdem nicht als Variablenname. Insbesondere dann nicht, wenn man mit "using namespace std;" sowieso schon alles pauschal accessible macht.
-
Super. Endlich eine Lösung nach 4 1/2h.
Wenn man sich dann das Ergebnis anschaut, fragt man sich echt warum man dafür so lang gebraucht hat#include <iostream> #include <string.h> #include <ctype.h> using namespace std; int main() { int iCount1,iCount2,tmp; char arrEingabe[1000]; cin >> arrEingabe; //alle Großbuchstaben zu Kleinbuchstaben for(iCount1=0;iCount1 < strlen(arrEingabe);iCount1++) { arrEingabe[iCount1]=tolower(arrEingabe[iCount1]); } //BubbleSort: for (iCount1 = 1; iCount1 < strlen(arrEingabe) ; iCount1++) { for (iCount2 = 0; iCount2 < strlen(arrEingabe) - iCount1 ; iCount2++) { if (arrEingabe[iCount2] > arrEingabe[iCount2+1]) { tmp = arrEingabe[iCount2]; arrEingabe[iCount2] = arrEingabe[iCount2+1]; arrEingabe[iCount2+1] = tmp; } } } //Ausgabe for (iCount1 = 0; iCount1 < strlen(arrEingabe); iCount1++) { cout << arrEingabe[iCount1]; } return 0; }
Ich habe euren Rat angenommen und den Namen des Arrays geändert. Sollte zufälligerweise später noch eins dazukommen, ist das sowieso besser.
Zusätzlich musste ich noch einbauen, dass alle Großbuchstaben in Kleinbuchstaben umgewandelt werden, da diese sonst vor den Kleinbuchstaben sortiert werden.
Hoffe es hat nun alles seine Richtigkeit und bedanke mich nochmal herzlich bei euch
-
@Encelave
Und was passiert, wenn du mehr als 1000 Zeichen eingibst?
-
@It0101 sagte in Zeichenkette in Array "einlesen"/übertragen:
@Encelave
Und was passiert, wenn du mehr als 1000 Zeichen eingibst?Dann habe ich ein Problem
Ein Array mit variabler Größe wäre schon recht gut, ja.
Aber frag mich bitte nicht, wie man das hinbekommt.Hat sicherlich was mit meiner Schwäche dem Pointer zu tun (signed, unsignend?)
-
C mit cout - echt toll.
std::string war jetzt zu kompliziert?
-
@Encelave
Daher weiter unten die Empfehlung mit "std::string". Der Vorteil für dich:
Egal wieviele Zeichen du eingibst: Der notwendige Speicher wird von diesem Object "std::string" stetig in Eigenregie beschafft, weil die Klasse den Operator "<<" überladen hat und daher genau weiß, wieviele Zeichen gerade hinzukommen.Siehe hier:
http://www.cplusplus.com/reference/string/string/operator%3C%3C/std::string MeinText; std::cin >> MeinText;
-
Das Programm sollte sehr kurz sein:
#include <algorithm> #include <iostream> #include <string> int main() { std::string s; getline(std::cin, s); std::sort(begin(s), end(s)); std::cout << s << '\n'; }
-
@It0101 sagte in Zeichenkette in Array "einlesen"/übertragen:
std::string MeinText; std::cin >> MeinText;
Klingt zwar sehr gut, heißt aber, dass BubbleSort hier logischerweise nicht mehr funktioniert.
std::sort
ist hierfür wohl die Lösung.
In http://www.cplusplus.com/reference/algorithm/sort/?kw=sort heißt es, dass man dafür einen Anfangs und ein Endwert benötigt. Im Beispiel der Internetseite werden dafür Vektoren verwendet. Das übersteigt jedoch derzeit mein Verständnis.
-
Klingt zwar sehr gut, heißt aber, dass BubbleSort hier logischerweise nicht mehr funktioniert.
Begründung?
-
@manni66 Davon Bin ich jetzt einfach ausgegangen, da ich keinen Plan habe, wie man mit einer Laufvariable auf die einzelnen Zeichen des strings zugreifen kann. Lag ich falsch mit meiner Annahme?
-
@Encelave http://www.cplusplus.com/reference/string/string/ --> Element access: Sogar 4 Funktion.
Lerne, die C++ Reference zu benutzen. Da findest du, was du brauchst.
-
@Encelave sagte in Zeichenkette in Array "einlesen"/übertragen:
@manni66 Davon Bin ich jetzt einfach ausgegangen, da ich keinen Plan habe, wie man mit einer Laufvariable auf die einzelnen Zeichen des strings zugreifen kann. Lag ich falsch mit meiner Annahme?
Ja. Das funktioniert wie bei einem Array. Und der String kennt seine Länge, strlen wird nicht benötigt.
-
@Encelave sagte in Zeichenkette in Array "einlesen"/übertragen:
In http://www.cplusplus.com/reference/algorithm/sort/?kw=sort heißt es, dass man dafür einen Anfangs und ein Endwert benötigt. Im Beispiel der Internetseite werden dafür Vektoren verwendet. Das übersteigt jedoch derzeit mein Verständnis.
Du kannst auch bei einem std::string auf einzelne Zeichen zugreifen und diese auch ändern/vertauschen.
Mit std::string::length bekommst du z.B. auch die Anzahl der Zeichen im std::string geliefert.Zugriff auf einzelne Zeichen mit
std::string MeinText = "1234567890"; char einzelneszeichen = MeinText[ 9 ]; int Laenge = MeinText.length();
Damit hast du alle notwendigen Funktionen um selbst ein Bubblesort zu schreiben ( wäre besser, wenn du den Lehrer beeindrucken willst ). Eine Vierzeilenlösung mit std::sort klingt sehr nach Internetlösung.
std::sort ist übrigens kein Bubblesort. Falls also Bubblesort deine Anforderung ist, kannst du das ohnehin nicht nehmen
-