Problem mit der for-schleife

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; j

mir 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 :smile:
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 :smile:

Hoffen hilft nicht :smile: 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]