Hallo
meine Frage
warum habe ich das gefühl als wird folgender teil nie durchlaufen:
for(j=0;j
Frage2: wie kann ich einen bestimmten Buchstaben aus einem String löschen
siehe FALSCH oben
Danke im vorraus
jungle
Hallo
meine Frage
warum habe ich das gefühl als wird folgender teil nie durchlaufen:
for(j=0;j
Frage2: wie kann ich einen bestimmten Buchstaben aus einem String löschen
siehe FALSCH oben
Danke im vorraus
jungle
OK so schon besser:
for(j=0;j\>strlen(wort);j++);
{
if(wort[j]==taste)
{
gotoxy(3+j\*2,18);
printf("%c",taste);
//wort[j]='\0'; FALSCH
}
}
aber warum findet er jetzt nur den ersten buchstaben von wort
jungle
OK so schon besser:
for(j=0;j>strlen(wort);j++);
SOLL ICH DIR DAS MAL VoRLESEN .
Das ja schrecklich, guckst Du den garnicht und rechnest mit ???
da steht
für
I. j gleich null eintragen
II. j ist grösser längedesString(wort)
III. erhöhe j um 1
Beispiel wort: „Hammer“
For anfang
I. J = 0
II.I langeString(wort)=6
II.II J grösser langeString(wort) also 0 > 6
III. J pluss 1 also J=1
ende
Hallo
meine Frage
warum habe ich das gefühl als wird folgender teil nie
durchlaufen:
Wird er , dafür muss variable „wort“ aber auch ein inhalt haben
string wort ;
wort = "Hammer";
if(strlen(wort) \> 0) // wenn wort midnestens 1 buchstabe hat
{
for( int j=0; j
mir aber schleierhaft was du da tust.
??? OT
…
hi
meine Frage
warum habe ich das gefühl als wird folgender teil nie
durchlaufen:Wird er , dafür muss variable „wort“ aber auch ein inhalt
haben
wort hat sicher einen Inhalt da ich den vom Benutzer abfrage bzw. selber eingebe
string wort ;
wort = „Hammer“;
if(strlen(wort) > 0) // wenn wort midnestens 1 buchstabe
hat
{
for( int j=0; jmir aber schleierhaft was du da tust.
geht mir genauso
bei jstrlen(wort) erkennt er das erste zeichen eines strings mehr nicht
dann guck doch mal welchen wert
int laenge = strlen(wort); // länge
hat.
weil j muss kleiner sein als länge um weiter in der for schleife zu sein.
und dann würde ich ++j machen und nicht j++, kann sein das das auch zu fehlern führt.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo jungle,
OK so schon besser:
for(j=0;j > strlen(wort);j++);
Hier ist schon mal der erste fehler
Muss j
Also setzen wir das ganze mal um:
j = 0;
loop:
if(wort[j]==taste)
{
gotoxy(3+j\*2,18);
printf("%c",taste);
wort[j]='\0';
}
j++;
if ( j **strlen(wort)) goto loop;**
und hier ist dein nächstes Problem:
bei jedem Durchlauf wird die Stringlänge neu ausgewertet. Ein String geht bis zum ‚\0‘. Mit „wort[j]=’\0’;“ setzt du die länge zurück und die Schlaufe wird beendet.
MfG peter(TOO)
bei strlen(wort) steht die richtige länge des strings drin und ++j hat auch nix gebracht
g j
Also setzen wir das ganze mal um:
j = 0;
loop:
if(wort[j]==taste)
{
gotoxy(3+j*2,18);
printf("%c",taste);
wort[j]=’\0’;
}
j++;
if ( j strlen(wort)) goto loop;und hier ist dein nächstes Problem:
bei jedem Durchlauf wird die Stringlänge neu ausgewertet. Ein
String geht bis zum ‚\0‘. Mit „wort[j]=’\0’;“ setzt du die
länge zurück und die Schlaufe wird beendet.MfG peter(TOO)
stimmt funktioniert schon besser
aber was ich will ist eher dass er wort durchläuft jedes vorkommen von taste findet, dann die ausgibt und taste an der betreffenden stelle aus wort löscht
Hallo jungle,
Du musst
wort[j]=’\0’;
durch
strcpy(&wort[j], &wort[j+1]);
wort(strlen(wort)) = ‚\0‘;
ersetzen
MfG peter(TOO)
funktioniert größtenteils
danke
nur die position bei gotoxy bleib immer gleich
eine ahnung warum??
danke
jungle
typo
Muss natürlich
wort[strlen(wort)] = ‚\0‘;
lauten !!
MfG peter(TOO)
Hallo jungle,
Vielleicht solltest du als erstes genau definieren, WAS du machen willst, bzw. wie sich das Programm verhalten soll und dann erst anfangen zu programmieren ??
MfG Peter(TOO)
Hi
danke jetzt funktionierts bei fast allen wörter-
was noch nicht geht sind wörter mit doppelbuchstaben zb ll-
egal, jedenfalls danke
mir reichts
Jungle
PS: das programm war geplant, aber daran dass sich das vielleicht irgendwie überschneiden könnte, daran hab ich nicht gedacht^^
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo
meine Frage
warum habe ich das gefühl als wird folgender teil nie
durchlaufen:for(j=0;j
Frage2: wie kann ich einen bestimmten Buchstaben aus einem
String löschen
siehe FALSCH oben
Ich schlage Lektüre über strings in C vor. Obige Fehler passieren dann evtl. nicht mehr.
So kann man dein problem lösen (gotoxy() und printf() mal weggelassen):
void entferneZeichenVonWort(char\* wort, char taste)
{
char\* r\_pos = wort; // Leseposition
char\* w\_pos = wort; // Schreibeposition
if (!wort) return;
while (\*r\_pos)
{
if (\*r\_pos != taste) \*w\_pos++ = \*r\_pos;
r\_pos++;
}
\*w\_pos = 0;
}
Muss natürlich
wort[strlen(wort)] = ‚\0‘;
lauten !!
Umgangsprachlich bedeutet: wort[strlen(wort)] = ‚\0‘;
soviel wie: „Das Wort ist so lang wie es lang ist!“
Heisst: die Zeile ist umsonst und macht effektiv
gar nichts ausser die CPU zu beanspruchen.
Das Problem liegt bereits in der ersten Zeile:
for(j=0;j
Da steht, dass du von 0 wegzählst, bis j kleiner ist, als die Länge von Wort.
Ich würde für diesen Fall eine while bzw. do-while Schleife zu empfehlen.
mfg Andreas
falsch
da es das ende des strings genau um eine stelle nach hintenverrückt
wort = hallo
sind 5 zeichen
gespeichert: h a l l o (0-byte) (6 byte)
wort[strlen(wort)]=’/0’;
im 5. zeichen (byte) wird das 0-byte gespeichert also bleibt übrig hall
gruss
jungle
ps: hoffe das stimmt so
Hoffen hilft nicht der Ausdruck „wort[strlen(wort)] = 0;“
setzt nicht das 5te Zeichen auf Null, sondern das Zeichen
an Index 5 (das ist das 6te Zeichen).
Anschaulich fuer das Wort „Hallo“:
Index : 0 1 2 3 4 5
Zeichen : H a l l o \0
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]