Kann mir jemand erklären, warum mit C++ so komische Zeichen ausgibt?
5 Antworten
Der Grund für die "komischen Zeichen" ist der, dass &meinString[100] die Adresse nach dem Array identifiziert. Dort steht irgendwas, aber nicht das Ergebnis der Ersetzung.
Stattdessen ist entweder "meinString" oder "&meinString[0]" zu verwenden.
hab' mir den Code nochmal genauer angesehen...
neben dem Offensichtlichen, sind da noch einige Fehler drin !!!
such und ersetz sind nur einzelne Chars, cin benötigt aber einen String, kein einzelnes Char !!!
dementsprechend sind auch die Zuweisungen zu pSuch und pErsetz falsch...
// beides müssen mindestens 2 Chars sein (weil nullterminierte Strings)
char such[2];
char ersetz[2];
char meinString[100];
char* pSuch;
char* pErsetz;
char* pString1;
cout << "String eingeben: " << endl;
cin >> meinString;
cout << "Zeichen erstetzen: " << endl;
cin >> such;
cout << "Durch was?: " << endl;
cin >> ersetz;
// entweder so (Zeiger auf erstes Char)
pSuch = &such[0];
pErsetz = &ersetz[0];
pString1 = &meinString[0];
// oder ganz einfach so (weil alle schon Zeiger sind)
pSuch = such;
pErsetz = ersetz;
pString1 = meinString;
// beides schon Zeiger also kein Asterisk davor
cout << pSuch << endl;
cout << pString1 << endl;
da gibt es verschiedene Ansätze...
ich mach eine neue Antwort dafür, weil man hier in einem Kommentar keine Code-Formatierung machen kann... ;)
Doch, Quellcode geht auch in den Kommentaren (klick rechts oben auf "Tt" und dann auf "···")
aha, da hast Du mir auch was beigebracht !!! :D
dann hier nochmal die zwei Ansätze zum Ersetzen...
// entweder solange der String nicht zuende ist
for(int i = 0; pString1[i] != '\0'; ++i){
if(pString1[i] == pSuch[0]) pString1[i] = pErsetz[0];
}
// oder solange i kleiner als die Länge des Strings ist
for(int i = 0; i < strlen(pString1); ++i){
if(pString1[i] == pSuch[0]) pString1[i] = pErsetz[0];
}
hier zwei Ansätze zum Ersetzen...
// entweder solange der String nicht zuende ist
for(int i = 0; pString1[i] != '\0'; ++i){
if(pString1[i] == pSuch[0]) pString1[i] = pErsetz[0];
}
// oder solange i kleiner als die Länge des Strings ist
for(int i = 0; i < strlen(pString1); ++i){
if(pString1[i] == pSuch[0]) pString1[i] = pErsetz[0];
}
Bist du dir sicher, dass das bei Unicode kein Problem ist? Ein Zeichen ist nicht immer genau 1 Byte groß.
Für diesen Zweck gibt es bereits Funktionen in der Standardbibliothek.
darum geht's hier wohl nicht...
ist eher eine einfache Aufgabe zur Zeigerarithmetik...
wie vorher, ist ja immer noch der selbe String, nur bearbeitet...
Ok habs rausgefunden, aber wie kriege ich das mit z.B. einem Satz hin? Bei einzelnen Wörtern geht das, aber bei mehreren nicht
cin als solches nimmt nur ein einzelnes Wort an...
um Sätze einzugeben, musst Du cin so benutzen:
cin.getline(meinString, sizeof(meinString));
Danke, hab noch das Problem, dass wenn ich ein Zeichen eingebe, also durch was es ersetzt werden soll nur ein Buchstaben angeben kann. z.B. ich würde gerne bei Test das "es" durch ein "x" ersetzen, geht aber nicht ich kann nur einzelne Buchstaben ersetzen. Wie kriege ich das hin?
ohhhh...
jetzt wird's kompliziert !!!
dann muss der such String erstmal gößer als 2 dimensioniert werden...
und dann muss in der Suchschleife noch eine Vergleichschleife eingefügt werden...
und schlussendlich müssen dann alle nachfolgenden Chars im String aufgerückt werden...
wobei Du jedesmal prüfen musst, ob der Index nicht über die Stringlänge geht...
da solltest Du lieber auf eine Stringklasse zurückgreifen, die dann Ersetzfunktionen zur Verfügung stellt !!! ;)
pString1 ist schon ein Zeiger, wenn Du jetzt ein Asterisk (*) davor stellst, derefernzierst Du den Zeiger, sollte bei pSuch aber genauso sein !!!
versuche es mal ohne dem Asterisk...
Es kann sein das es keine Sonderzeichen ausgeben kann.
Wie schaffe ich es jetzt mit einer Schleife und nem Pointer die Stelle zu ermitteln, wo ich das ersetzen möchte und es dann auch dementsprechend ersetze?