Zum Inhalt springen

Leerzeichen aus String löschen (war: frage?)


Empfohlene Beiträge

Geschrieben

kann mir mal jemand helfen. bin heute schon den ganzen tag am verzweifeln.

ich hab folgendes problem.(bin noch ein neuling beim programmieren^^)

ich will unten einen string eingeben und aus diesem string die leerzeichen löschen.

irgendwie funktioniert meine funktion aber nicht. sie hört nach dem ersten leerzeichen auf?!?!?!?

hier mal das programm:

#include <stdio.h>

#include <string.h>

void entfernen (char *s){

char *ptr ;

while(*s != '\0')

{

if (*s != ' ')

{

*ptr++ = *s;

}

*s++;

}

*ptr = '\0';

s = ptr;

}

main(){

char string[20];

printf("bitte etwas eingeben: \n");

scanf("%s", &string);

entfernen (string);

printf("%s", string);

return 0;

}

Geschrieben

Das liegt nicht an deiner Funktion. Lass dir doch den String mal nach dem Einlesen ausgeben ;)

Und nebenbei: "frage?" ist ein denkbar schlechter Threadtitel. Eine Frage hat hier nämlich so ziemlich jeder, der einen Thread erstellt. Ich hab das mal für dich angepasst, beim nächsten Thread bitte selbst einen aussagekräftigen Titel ausdenken.

Geschrieben

oke, war vlt ne blöde Überschrift....

hast du mich falsch verstanden oder ich dich.

ich schreibe z.B bla bal. ich möchte das dieses Leerzeichen gelöscht wird und dann dann da steht: "blabla"

Geschrieben

sorry das ich hier so viele poste, aber ich bin zum eresten mal in einem forum und kenn mich noch nicht so gut aus.

also ich denke das irgendwas an den algorithmus nicht stimmt in meiner funktion.

ich lass mir ja danach den string ausgeben in der printf. aber bei der ausgabe kommt nicht das raus was ich eingentlich vor hatte^^

Geschrieben
wieso bitte ist das falsch mit scanf?

scanf mit %s liest nur bis zum ersten Leerzeichen ein. Es steht von Anfang an nicht mehr in deinem String drin.

Darum hatte ich dir auch den Tipp gegeben, den String nach der Eingabe einfach mal auszugeben, dann hättest du das gesehen.

Wenn du eine ganze Eingabezeile einlesen willst, benutz fgets mit stdin.

Und noch ein paar Anmerkungen:

  • Dein Zeiger ptr ist nicht initialisiert. Es wundert mich, dass dir das Programm nicht sofort um die Ohren fliegt.

  • Bei diesem Code bewirkt das Sternchen gar nichts:
    *s++;



  • Du kannst innerhalb der Funktion den Zeiger s "umbiegen", das wirkt sich aber nicht auf den Zeiger auf, der beim Aufruf der Funktion benutzt wurde, weil die Funktion mit einer Kopie arbeitet.

Geschrieben

  • Du kannst innerhalb der Funktion den Zeiger s "umbiegen", das wirkt sich aber nicht auf den Zeiger auf, der beim Aufruf der Funktion benutzt wurde, weil die Funktion mit einer Kopie arbeitet.

Sind Zeigerparameter nicht Call by Reference?

hmm, notfalls muss man halt die Adresse des Arrays übergeben.

Geschrieben
Sind Zeigerparameter nicht Call by Reference?
Zeiger sind der Mechanismus, wie man in C Call-by-Reference umsetzt. Dadurch kann man das ändern, worauf dieser Zeiger verweist. Der dazu verwendete Zeiger selbst ist nach wie vor Call-by-Value.
Geschrieben

ich hab jetzt mal ein bisschen rumprobiert und oben in der funktion meinem *ptr s zu gewiesen und bei *s++ den zeiger weggelassen und auf einmal funktioniert es ?!?!

das mit dem einlesen mit scnaf hab ich nicht gewusst. hab jetzt die fgets verwedendet, danke für den tipp ;)

sieht jetzt so aus:

#include <stdio.h>

#include <string.h>

void entfernen (char *s){

char *ptr = s ;

while(*s != '\0')

{

if (*s != ' ')

{

*ptr++ = *s;

}

s++;

}

*ptr = '\0';

s=ptr;

}

main(){

char string[20];

fgets(string,sizeof(string),stdin);

entfernen(string);

printf("%s",string);

return 0;

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...