Buchstaben ersetzen



  • Hallo
    ich habe ein Programm welches mir einzelne Zeichen ersetzt. Wie kann ich aber ein Zeichen durch 2 Zeichen ersetzen.

    zb. ä durch ae

    Wie regle ich dass es haete oder haette schreibe bezogen auf einfügen und überschreiben.

    MfG



  • Na einfach 2 Buchstaben statt einem reinschreiben 🙄



  • Wenn ich mit fgetc einlese heißt es:

    warning: assignment makes integer from pointer without a cast

    Mit dem Einfügen oder Überschreiben wird eine Funktion klappen. Wie programmiere ich aber dann die andere.



  • Natürlich tut es das....

    BTW: Du brauchst hier nicht mal Code posten, wir wissen sofort was du meinst



  • while (buchstabe!=EOF)
            {
                buchstabe=fgetc(pfile);
    
                if (buchstabe=='ä')
                {
                    buchstabe="ae";
                }
                printf("%c",buchstabe);
            }
    


  • Wenn buchstabe ein char ist wird das nicht funktionieren
    Das sollte nicht mal kompilieren.

    ein char kann nur einen Buchstaben beeinhalten.
    Was musst du also tun um daraus 2 zu machen?



  • Dass das der Fehler ist habe ich mir auch schon gedacht wie in der ersten Nachricht steht.

    "Wie kann ich aber ein Zeichen durch 2 Zeichen ersetzen."

    Vielleicht über die Adresse ansprechen und einfügen.



  • Bevor du über sowas nachdenkst, solltest du dir erstmal klarwerden, dass 'a' eine Zeichenkonstante (ein Zeichen) ist, und "a" eine Zeichenkettenkonstante (ein String). Da buchstabe höchstwahrscheinlich als char (ein Zeichen) definiert ist, kann die Zuweisung "buchstabe="ae";" niemals funktionieren. Äpfel und Birnen! Davon abgesehen liest du aus einer Datei und willst vermutlich auch wieder in diese Datei schreiben. Dann bringt es wenig, "buchstabe" zu ändern, das ist ja nicht automatisch auch in deiner Datei. 😉

    P.S.: Immer die Fehlermeldung posten! Keiner rät gerne...



  • Das was du beschrieben hast ist mir alles klar.

    Ich lese immer ein Zeichen ein um zu kontrollieren ob es ein 'ä' ist. Ich komme aber nicht auf die Funktion wenn ich ein Zeichen einlese wie ich zwei auf der selben Position ausgeben kann.

    Die Frage ist auch wenn ich zwei Zeichen ausgeben will, überschreibt er das andere Zeichen oder fügt es ein.

    Will es im Dos ausgeben!



  • Wenn du dein Ergebnis nur ausgeben und nicht in der Datei speichern willst, dann kannst du das ja ganz simpel realisieren.

    switch(buchstabe) {
    	case 'ä':
    		printf("ae");
    		break;
    	case 'ö':
    		printf("oe");
    		break;
    	case 'ü':
    		printf("ue");
    		break;
    	default:
    		printf("%c",buchstabe);
    }
    
    //und noch für Großbuchstaben...
    

    Wenn du allerdings die Datei verändern willst, dann musst du die nachfolgenden Zeichen verschieben. Da bringt es nix, dem char buchstabe einen String zuweisen zu wollen, um den dan vielleicht einfach wieder zurückzuschreiben...



  • abcd schrieb:

    while (buchstabe!=EOF)
            {
                buchstabe=fgetc(pfile);
    
                if (buchstabe=='ä')
                    printf("ae");
                else
                    printf("%c",buchstabe);
            }
    


  • _matze schrieb:

    Wenn du allerdings die Datei verändern willst, dann musst du die nachfolgenden Zeichen verschieben.

    Dann schreibt man sinnvollerweise in eine neue Datei.



  • Spring doch einfach von Umlauf zu Umlauf, und ersetze sie dann entsprechend. Der Text dazwischen interessiert dich nicht sonderlich, den kannst du doch ausgeben, wie er ist.

    strchr(...) ist dein Freund 😉



  • Danke, auf die Idee hätte ich selber kommen können.

    1)Weil du mich auf die Idee gebracht hast wollte ich das auch mal versuchen, aber es ändert überhaupt nichts an der Datei.

    2)Was mich noch interessiert, wenn man mit fgetc oder fgets einliest wie kann man das allerletzte Zeichen von der Datei finden.
    Als ich mit fgets versucht habe einzulesen hat er immer beim letzten Zeichen der Zeile '\0' ausgegeben.

    datei=fopen(argv[1], "r+");
    
        if (pfile!=NULL)
        {
            printf("Datei %s konnte geöffnet werden\n\n",argv[1]);
    
            while (buchstabe!=EOF)
            {
                buchstabe=fgetc(datei);
    
                if (buchstabe=='ä')
                {
                    fprintf(datei,"ae");
                }
                else
                fprintf(datei,"%c",buchstabe);
            }
    


  • fseek( file, 0, SEEK_END );
    


  • Wenn ich den Text auslese überschreibt er mir nicht den Text und im Dos steht ein ganz komischer Text. Was kann das sein.

    pfile=fopen(argv[1], "r+");
    
     while (buchstabe!=EOF)
            {
                buchstabe=fgetc(pfile);
    
                if (buchstabe=='ä')
                {
                fputc(buchstabe,pfile);
                printf('$',buchstabe);
                }
                else
                {
                fputc(buchstabe,pfile);
                printf("%c",buchstabe);
                }
    
            }
    


  • abcd schrieb:

    if (buchstabe=='ä')
                {
                fputc(buchstabe,pfile);
                printf('$',buchstabe);
                }
                else
                {
                fputc(buchstabe,pfile);
                printf("%c",buchstabe);
                }
    
            }
    

    Was denkst du, was hier passiert?!



  • _matze schrieb:

    switch(buchstabe) {
    	case 'ä':
    		printf("ae");
    		break;
    	case 'ö':
    		printf("oe");
    		break;
    	case 'ü':
    		printf("ue");
    		break;
    	default:
    		printf("%c",buchstabe);
    }
    

    ^^
    das könnte schon an 'nem compiler scheitern, der sich weigert, quelltexte zu fressen, die irgendwelche komischen sonderzeichen enthalten.
    🙂



  • Sag mal, was machst Du, damit das hier nicht zum unkontrollierten Absturz führt:

    printf('$',buchstabe);
    

    Ich wette damit kriegt man bei Windows 95 noch reproduzierbar Bluescreens 🙂
    Bei Dir scheint es ja zu einem wunderschönen Memory-Dump zu führen:

    Wenn ich den Text auslese überschreibt er mir nicht den Text und im Dos steht ein ganz komischer Text. Was kann das sein.

    Außerdem was soll er den bitte überschreiben? Du gibst es doch bloß auf der Konsole aus? (Oder meinst Du mit DoS, dass Du es nicht auf der Konsole ausgibst, sondern einen fremden Server damit attackierst...?)



  • Die Zeile war falsch.

    if (buchstabe=='ä')
                {
                buchstabe='&';
                fputc(buchstabe,pfile);
                printf("%c",buchstabe);
                }
                else
                {
                fputc(buchstabe,pfile);
                printf("%c",buchstabe);
                }
    
            }
    

    Geplant war dass es jeden Buchstaben ausließt und schaut ob es ein "ä" ist. Falls ja soll er es durch ein "&" ersetzen und im Dos und in der jeweiligen Datei ausbessern.


Log in to reply