beliebiges Zeichen suchen und ersetzen



  • hallo zusammen 😉
    ich soll eine Funktion schreiben, die ein beliebiges Zeichen sucht und es überall in dieser Zeichenkette durch ein anderes Zeichen ersetzt ich hab jetzt in meinem bsp "e" suchen lassen und es durch x ersetzt. So weit so gut, nun hab ich das problem, das wir einen Prototypen vorgesetzt bekommen haben mit dem wir das problem lösen sollen nur krieg ich das nicht hin der Protoyp sieht folgendermaßen aus : void ersetze_zeichen(char *s, char alt, char neu);
    und so mein programm:

    int main(){
        char alt[80],neu;
        int i ,max, von;
        printf("bitte  geben Sie ihren satz oder ihr wort an\n");
        gets(alt);
        printf("ab dem wievielten e sollen die e's ersetzt werden ? und wieviel sollen ersetzt werden ?");
        scanf("%i %i",&von,&max) ;
        for(i=0;i<=strlen(alt); i++){
    
        if (alt[i] == 'e' || alt[i] == 'E'){
                   if(i >=  von && i<= max)alt[i] = 'x';
                   }
    }
    printf("%s\n",alt);
    system("pause");
    }
    

    wäre für hilfe Dankbar 😃


  • Mod

    Ok, dazu musst du folgendes lernen (lernen ist etwas anderes als die Lösung vorgesetzt bekommen): Wie Funktionen geschrieben und aufgerufen werden.

    Dann ersetzt du den Code der für das eigentliche Suchen und Ändern des Zeichens zuständig ist (Tipp: Das heißt deine for-Schleife) durch den Funktionsaufruf. Und in die Funktion schreibst du eben jenen Code den du da ersetzt hast. Und dann ersetzt du in diesem Code die festen Literale (also das 'e', 'E' und 'x') durch die entsprechenden Parameter die im Funktionskopf und pass auch auf die Namen der anderen Variablen auf.



  • void ersetze_zeichen(char *s, char alt, char neu)
    {
    	if (*s)
    	{
    		*s = *s == alt ? neu : *s;
    
    		ersetze_zeichen(++s, alt, neu);
    	}
    }
    

    🤡



  • ich will ja auch keine vorgesetzt lösung 😛
    gut funtion aufrufen ist ja nicht so schwer einfach
    void ersetze_zeichen(char *s, char alt, char neu);
    zwischen den librays und der main und später dann halt die funktion drunter schreiben...
    mein problem ist aber eher der pointer der verwendet wird :S
    und wie du vllt siest verwende ich den char neu auch nicht wirklich 😛



  • ok jetzt hab ich zu spät den zweiten post gesehn danke 😉



  • void ersetze_zeichen(char *s, char alt, char neu);
    
    int main()
    {
        char alt[80];
    
        printf("Bitte geben Sie Ihren Satz oder ihr Wort ein:\n");
    
    	fgets(alt, 80, stdin);
    
    	ersetze_zeichen(alt, ' ', '#');
    
    	printf("%s\n", alt);
    
    	system("pause");
    
    	return 0;
    }
    
    void ersetze_zeichen(char *s, char alt, char neu)
    {
     // TODO: Code einfügen
    }
    

    Die Änderungen die du in der Funktion machst bleiben auch nach dem Verlassen bestehen, da es sich um einen Zeiger handelt.



  • Peter1923 schrieb:

    ok jetzt hab ich zu spät den zweiten post gesehn danke 😉

    Die Lösung solltest du aber nicht nehmen. Das war mehr ein Gag. Mach es lieber mit strlen und so selber. Jedes Zeichen durchgehen und wenn es gleich alt ist, dann mach daraus neu.



  • strlen funktioniert leider nicht mehr weil es sich ja jetzt um einen pointer und nicht mehr um einen array handelt..



  • Doch!



  • öklökl schrieb:

    void ersetze_zeichen(char *s, char alt, char neu)
    {
    	if (*s)
    	{
    		*s = *s == alt ? neu : *s;
    
    		ersetze_zeichen(++s, alt, neu);
    	}
    }
    

    🤡

    if( s && *s )
    ...
    

    😉



  • @Peter1923

    Wenn du den Code nicht verstanden hast, dann solltest du nachfragen.

    Wenn du ihn verstanden hast, sollte dir eine Vereinfachung auffallen. 🙂



  • Weg mit ihr.

    void ersetze_zeichen(char *s, char alt, char neu) 
    { 
        while (*s) 
        { 
            if(*s == alt) *s = neu; ++s;
        } 
    }
    


  • void ersetze_zeichen(char *s, char alt, char neu)
    {
        while (s && *s)
        {
            if(*s == alt) *s = neu; 
            ++s;
        }
    }
    

Anmelden zum Antworten