String über Unterprogramm einlesen und ausgeben?



  • Hallo liebe Community,

    ich bin grad schier am verzweifeln. Nach ausführlicher (erfolgloser) Suche im Netz hoffe ich nun, dass mir hier jemand helfen kann...

    Ich möchte ein Programm erstellen, mit dem ich in einem einzulesenden Satz einzelne character verändere. Also zb alle Buchstaben e durch 8 ersetzen und das Wort Pizza durch Nudeln. Sowas.

    Allerdings stehe ich jetzt wohl irgendwie auf dem Schlauch. Prototyp der Unterfunktion lautet

    [c]

    zeichenersetzen (char *satz, char alt, char neu)
    

    Ich bin schonmal nicht so ganz sicher, warum alt und neu nicht als Arrays definiert sind? Die werden ja am Anfang auch schon eingelesen.

    Aber mein eigentliches Problem ist folgendes:

    Ich habe es schon mit

    ausgabe= void zeichenersetzen (char *satz, char alt, char neu)
    

    und

    ausgabe = zeichenersetzen (char *satz, char alt, char neu)
    

    versucht, aber es wird bei letzterem der Fehler gemeldet, zu wenige Argumente und vor Char etwas anderes erwartet oder dann "epected expression before void".

    Wie gebe ich so etwas denn richtig ein, damit es als Unterprogramm verstanden wird und dann bearbeitet werden kann?

    Danke schonmal...



  • Nicht so wirklich klar, was Du meinst.

    #include <stdio.h>
    
    void zeichenersetzen(char *satz, char alt, char neu)
    {
    	for (; *satz; ++satz) {
    		if (*satz == alt) {
    			*satz = neu;
    		}
    	}
    }
    
    int main(void)
    {
    	char eingabe[82];
    	fgets(eingabe, sizeof(eingabe), stdin);
    
    	zeichenersetzen(eingabe, 'e', 'X');
    
    	puts(eingabe);
    }
    


  • Okay danke! Problem war, dass ich nicht eingabe= schreiben darf, sondern es ja schon über zeichenersetzen(eingabe, x, y) verbdunden wurde!



  • Milchglasarena schrieb:

    main: // was soll das sein? Ja, es ist eine Sprungmarke aber die Funktion main sollte anders aussehen.
    	strcpy(satz, "Ich esse gerne Pizza"); // satz ist nicht deklariert,
    	strcpy(alt, "Pizza");                 // alt und
    	strcpy(neu, "Pommes");                // neu auch nicht.
    	
    	
    	printf("Satz alt: %s", satz);
    
    	satzneu= void zeichenersetzen (char *satz, char alt, char neu);
    	// warum schreibst Du hier die Deklaration hin? Ein Funktions-
    	// aufruf sieht anders aus. satzneu= ... ist undeklariert und eine
    	// Funktion die void also nichts zurueckgibt hat auch kein Ergebnis
    	// das man irgendetwas zuweisen koennte.
    	
    	printf("Satz neu: %s", satzneu);
    
    UP: // was soll diese Sprungmarke?
    void zeichenersetzen(char*satz, char search, char neu)
    {
    	while (*satz != 0)
    	{
    		if (*satz == search)
    			*satz = neu;
    		satz++;
    	}
    }
    


  • Milchglasarena schrieb:

    Nach ausführlicher (erfolgloser) Suche im Netz hoffe ich nun, dass mir hier jemand helfen kann...

    Wie wäre es mit einer ausführlichen Suche in einem Lehrbuch über C? Da steht alles drin. 🙂



  • Swordfish schrieb:

    Nicht so wirklich klar, was Du meinst.

    #include <stdio.h>
    
    void zeichenersetzen(char *satz, char alt, char neu)
    {
    	for (; *satz; ++satz) {
    		if (*satz == alt) {
    			*satz = neu;
    		}
    	}
    }
    

    pre-increment ist schlechter stil. das kommt von c++, dem schlechteren c. 🙂



  • Quatsch.



  • Wutz schrieb:

    Quatsch.

    Nope; Pre-inc kann in C++ zur Erzeugung unnötiger Objekte führen,
    C++ ist Scheiße.
    Danke der Nachfrage.




Anmelden zum Antworten