Stringlänge, buchstaben suchen und ersetzen
-
Ich hab ein ähnliches bzw gleiches problem welches schon in "Stringlänge" besprochen wurde^^
Und zwar soll ich für die Schule ein Prog schreiben und in dem Programm soll man einen Text eingeben, den kann man dann verändern, indem man einzelne Buchstaben raussucht und durch andere ersetzen... man soll auch rausfinden wie oft z.b. der buchstabe 'a' in dem satz vorkommt... und zum schluss soll man die länge des satzes ausgeben...ich bin absoluter c++ neuling und hab erstmal kA wie ich das machen soll mit strlen(const char *a)-> Wie übergebe ich den ermittelten wert nun einer anderen variable?
bitte kein fachchinesisch bzw. befehle für fortgeschrittene ^^ sonst bringt es mir ja nichts... ich hab mir schon total lange den kopf darüber zerbrochen aber ich find keine Lösung...
wenn ihr auch ne lösung zu den anderen problem habt wäre das auch kool...
MFG
euer Problemfall ^^
-
Poste doch mal, wie du angefangen hast (Dein bisheriger Code).
edit:
int laenge = strlen(char* zeichenkette);
-
Einer Variable zuweisen:
Variable links, Gleichheitszeichen, das was rein sollint n; n = strlen(text);
Zu dem anderen "Problem":
Du kannst alle geforderten Aufgaben mittels einer Schleife über den String erledigen. Muster:for (int i = 0; i < laenge_von_text; ++i) { // text[i] ist das aktuelle Zeichen // Buchstaben raussuchen: Prüfen ob text[i] == 'c' (wobei c der Buchstabe ist) // Buchstaben ersetzen: text[i] = 'n' (wobei n der neue Buchstabe ist) // usw. }
Ich denke das sollte als Muster reichen wenn Du Dir selbst was erarbeiten willst.
-
Vielen Dank schonmal für das Muster! das hlift mir sehr (:
ich glaube dieses size_t kann man weg lassen, aber selbst dann kann ich nicht z.b.u=strlen(const char *a)
benutzen, sonst krieg ich eine Fehlermeldung...
cosnt kann ich anscheinend auch net weglassen, weil ich dann auch ne fehlermeldung kriege... ich wüßte auch so keinen weg diese zu umgehen#include <iostream.h> #include <cstring> int zahlen(char *a); void main() { char a[120]; cout<<"Geben Sie einen Satz ein:\n"; cin.get(a,119); zahlen(a); } int zahlen(char *a) { size_t strlen(const char *a); return(NULL); }
vielen dank im vorraus für eure hilfe!
-
nim doch std::string
std::string str; str = "dein text is hier"; str.length(); str.erase(...); str.replace(...);
[url]
http://cppreference.com/cppstring/index.html
[/url]
Mfg shade37337
-
Mit diesem Ausdruck
size_t strlen(const char *a);
deklarierst Du eine Funktion strlen, die einen C-String annimmt und eine Größe zurückgibt. Das willst Du sicher nicht, sondern Du willst strlen benutzen:
size_t ergebnis = strlen(a);
Lies Dir am Besten noch mal die Grundlagen zu Funktionsdefinition und -aufruf durch
BTW:
Weiter oben, dort wo Du "zahlen" aufrufst, nach dem cin.get, hast Du offenbar verstanden wie's geht. strlen rufst Du genau so auf wie Dein "zahlen".
-
Problemfall ^^ schrieb:
int zahlen(char *a) { size_t strlen(const char *a); return(NULL); }
const char *a ist ja auch nur der Platzhalter für die Variable.
int zahlen(char *a) { int laenge = strlen(a); return(NULL); }
Achso, was habt ihr in eurer Schule denn bisher gelernt?
-
Vielleicht sollte man laenge auch zurückgeben.
-
@Braunstein:
Ohne zu Wissen was "zahlen" eigentlich machen soll (zaehlen ist es offenbar nicht) fass ich die innere Funktionalität nicht an
-
Braunstein schrieb:
Vielleicht sollte man laenge auch zurückgeben.
Wozu?
Spaß beiseite, hast ja recht:
int zahlen(char *a) { return strlen(a); }
-
Oh stimmt... aber im buch steht halt dieses "size_t" und dieses "const"..das hat mich total durcheinander geworfen und hab den wald vor lauter bäumen nicht gesehen , wie peinlich
im buch wird halt nicht erklärt warum const und warum size_t...ach in der schule haben wir bisher nur über variablen, switch und case, Arrays, grundrechenarten mit brüchen und sind halt nun bei strings, nicht wirklich viel geschafft...
aber auf jedenfall vielen dank für eure hilfe (:
-
Du kannst ja auch size_t verwenden.
size_t zahlen(char *a) { size_t res = strlen(a); return res; }
Wenn es unbedingt const char* sein soll, geht strlen aber nicht so einfach, da es einen nichtkonstanten char erwartet. Dies ist bei mir der einzige Fall wo ich je einen const_cast eingesetzt habe.
size_t zahlen(const char *a) { size_t res = strlen(const_cast<char*>(a)); return res; }
Eine Alternative wäre hier eine eigen strlen-Funktion zu schreiben (siehe anderer Thread).
-
Braunstein schrieb:
Wenn es unbedingt const char* sein soll, geht strlen aber nicht so einfach, da es einen nichtkonstanten char erwartet. Dies ist bei mir der einzige Fall wo ich je einen const_cast eingesetzt habe.
Dürfte ich Dich hier auf ISO/IEC 9899:1999 Punkt 7.21.6.3 The strlen function verweisen?
(Im ISO/IEC 14882:1998 ist die Signatur btw auch mit const angegeben)
-
Da hast du recht.
Bei einem meiner Compiler (ist schon ne Weile her) war das nicht const. Das hat sich wohl irgendwie bei mir festgesetzt.
Ich hab gerade mal nachgeschaut und festgestellt, dass meine derzeitigen Compiler das auch alle const char* haben.