while schleife funktioniert nicht (s muss änderbarer Ivalue sein)
-
wie wärs mit
int i = 0; while(s[i] != 0) { ///////// i++; }
die alte variable i musst du dann natürlich umbenennen.
-
@DirkB Danke für die Antwort, aber eine Funktion zum löschen eines Zeichens habe ich bereits bzw. das ist nicht das Problem. In der Konsole soll der String ausgegeben werden und darunter die Positionen (Zahlen: 0123456..). So steht der erste Buchstabe über der 0 der zweite über der 1 usw. Um diese Zahlen in Abhängigkeit zur Länge des Strings auszugeben möchte ich die while Schleife laufen lassen. wenn s++; dann auch i++; und die einzelne Ausgabe von den i´s auf die Konsole. Und da das Problem die schleife mit s++; ist nicht zulässig.
Wenn ich dich richtig verstanden habe muss ich also den definierten string, char [] = "string" anders schreiben um ihn ändern zu können?
-
@Wade1234 Bekomme bei s++; leider noch immer diese Fehlermeldung.
Hab mir überlegt diese while schleife einfach als seperate Funktion zu machen und dann in meiner Funktion an der stelle einzufügen bzw. laufen zu lassen.
Das funktioniert doch, oder? Funktion in Funktion.
-
@Platinumer
das s++ musst du dann weglassen. mit s[i] greifst du auf das i-te element zu. also ein programm, um ein zeichen aus einem array zu löschen, könnte dann so aussehen:int main() { char array[100] = "Dies ist ein Test."; unsigned int pos; unsigned int i; printf("Welches Zeichen moechten Sie loeschen?\n"); scanf("%u", &pos); for(i = pos; array[i] != 0; i++) { array[i] = array[i + 1]; } printf("%s\n", array); return 0; }
normalerweise musst du da aber noch die position gegen die länge prüfen, aber das habe ich jetzt mal weggelassen.
-
Okay das mit der Schleife hab ich gelöst bekommen. Hab eine kleine seperate Funktion geschrieben.
Jetzt bleibt nur noch das Problem mit dem "Zeichen an Position löschen". Probiere deine Idee gleich mal aus @Wade1234@Wade1234 hat geklappt, danke
-
ich finde, dass du nicht mit zeigern arbeiten solltest, solange du nicht mit arrays arbeiten kannst.
-
Dieser Beitrag wurde gelöscht!
-
@Wade1234 sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
ich finde, dass du nicht mit zeigern arbeiten solltest, solange du nicht mit arrays arbeiten kannst.
lool
-
void myStrChrDeleteByPosition(char *s,int i) { for(char *p=s+i;*s=s[s>=p];++s); }
-
@Platinumer sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
muss ich also den definierten string, char [] = "string" anders schreiben um ihn ändern zu können?
Du kannst jederzeit einen weiteren Zeiger auf das Array zeigen lassen.
So wie du es versuchst, würde die Information über den Anfang des Arrays verloren gehen.
-
@Wutz: Nicht sehr effizient für lange Strings mit hohem Index (aber dafür konstant je String ;- ).
-
@Sarkast sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
Was du wirklich brauchst, ist überdies https://man.cx/strcpy
strcpy()
hat für sich überlappende Speicherbereiche UB, ist also für das "Löschen" in-place nicht geeignet.
-
@Swordfish Du hast völlig recht, die ganze Familie mag kein Overlapping.
-
@Sarkast sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
@Swordfish Du hast völlig recht, die ganze Familie mag kein Overlapping.
memmove verträgt es.