C Zeichen aus string löschen

ado1985

Newbie
Registriert
Juni 2013
Beiträge
3
Hallo, bin neu hier. Hab ein Problem mit folgender Aufgabe. Ich soll ein Programm schreiben, in dem ich ein string eingebe und dann ein Zeichen lösche. Den Quellcode habe ich soweit denke ich richtig hinbekommen. Jetzt soll ich noch eine passende void Funktion dazu schreiben.


int main()

{

char zeichenkette[Laenge + 1], zeich_loesch;


printf("Geben Sie eine Zeichenkette ( max %d Zeichen) ein: \n\n", LAENGE);
fgets(zeichenkette, Laenge, stdin);

printgf("\nGeben Sie das zu löschende Zeichen ein ");
zeich_losch = getchar();

loesche_zeichen(zeichenkette, zeich_loesch) ;

printf("Die neue Zeichenkette ist dann:\n" );
printf("%s\n", zeichenkette);

return 0;

}
 
ähhh...
wir sollen dir jetzt erklären wie die funktion
Code:
void loesche_zeichen(char *, char);
Implementiert gehört?

oder brauchst du nur allgemeine tipps?

oder habe ich die frage überhaupt falsch verstanden
 
Dir ist schon klar das dein Quelltext eine Unterfunktion aufruft welche diese Void-Funktion sein soll. Wir lösen hier doch nicht deine Haus-/Schulaufgaben ^^.

Du musst eben die Funktion "loesche_zeichen" schreiben.

In der Funktion musste einfach das char-Array in ein neues Array schreiben und alle Zeichen auslassen das die dem entsprechen was der User eingegeben hat. Ich sag nur: ASCII Tabelle ist sehr hilfreich. Und das neue Array schreibst dann wieder über das Alte und fertig.

​Denke damit solltest die Lösung hinbekommen.
 
danke für den Tipp!

PS: Haus-/ Schulaufgaben muss ich nicht mehr machen! Ist eher eine Übung bis ich meine Ausbildung anfang!
 
Ja sry, solche Anfragen sind zu mindestens 90% immer Hausaufgaben oder ähnliches ;)
 
Kein Problem. Wenn ich mir hier die Hausaufgaben lösen lassen würde, hätte ich bis zu einer Klausur immer noch die gleichen Probleme!!;-D
 
Erstmal eins vornweg: Es gibt - wie so oft beim Programmieren - keine Musterlösung, sondern man kann da ruhig kreativ werden.

Variante 1:
Neuen Puffer anlegen, alten String zeichenweise kopieren es sei denn es ist das gesuchte Zeichen. Anschließend wieder rückkopieren.

Variante 2:
String durchsuchen, bei gefundenem Zeichen praktisch die folgezeichen nach vorn rücken/kopieren. Den Stringpuffer brauchst du dann nicht zu löschen, lediglich am Ende ein 0x00 bzw, \0 anfügen.


Die Implementierung obliegt dir.

Btw.: Weitere Lösungsstrategien sind natürlich willkommen.
 
@DaZpoon: Wenn alle Zeichen verschoben werden braucht er nur das Null-Byte auch mit verschieben und braucht es dann nicht mal gesondert betrachten...
 
1668mib schrieb:
@DaZpoon: Wenn alle Zeichen verschoben werden braucht er nur das Null-Byte auch mit verschieben und braucht es dann nicht mal gesondert betrachten...

Ob man's kopiert oder direkt setzt ist doch ziemlich schnippi, oder? Je nach gewählten Schleifentyp ist es jeweils um ne Zeile länger oder kürzer.
 
jein... Sonderbehandlungen sind mitunter unschön und können Code unnötig aufblähen...
 
Das, was du da hast, ist schon falsch. Denn getchar() hat als Rückgabewert int und nicht char.

getchar() gibt zwar oft Daten zurück, die als char interpretiert werden können, manchmal aber nicht. Und das solltest du erst prüfen.

Code:
SYNOPSIS
       #include <stdio.h>

       int fgetc(FILE *stream);

       char *fgets(char *s, int size, FILE *stream);

       int getc(FILE *stream);

       int getchar(void);

       char *gets(char *s);

       int ungetc(int c, FILE *stream);

DESCRIPTION
       fgetc() reads the next character from  stream  and  returns  it  as  an
       unsigned char cast to an int, or EOF on end of file or error.

       getc()  is equivalent to fgetc() except that it may be implemented as a
       macro which evaluates stream more than once.

       getchar() is equivalent to getc(stdin).

[...]
 
Zurück
Oben