Zeichen ersetzen?



  • Hai,
    habe das Problem, dass ich in einem String Sonderzeichen/Umlaute habe. Wie kann ich die Umlaute ersetzen?

    z.b.:

    csv = fopen("test.csv","r");
                 if(csv != NULL)
                 {
                        while(!feof(csv)) 
                        {
                                fgets(string,100,csv);
                                printf("%s\n",string);
    
                        }
                        getch();
                 }
                 else
                 {
                     printf("Datei konnte nicht geoeffnet werden!\nBeliebige Taste um das Programm zu beenden...");
                     getch();
                 }
                 fclose(csv);
    

    beim auslesen der Datei wird in "string" die Zeile der Datei geschrieben.
    Die Daten möchte ich von a,ö,ß usw... befreien und wieder in die Datei schreiben. string ist so deklariert:

    char string[100];
    

    Ist das möglich?
    Danke schonmal.



  • Durch was willst du die Umlaute denn ersetzen? Wenn du nur die DOS-Darstellung von ä,ö, ü, ß etc durch ihre Windows-Entsprechung austauschen willst (oder umgekehrt), kannst du dir die ASCII- (DOS) bzw. ANSI- (Windows) Zeichentabellen ansehen und die richtigen Zeichencodes suchen und überschreiben:

    for(i=0;i<strlen(string);++i)
    {
      switch(string[i])
      {
      case 0x84 : string[i]=0xE4; break;//ASCII ä -> ANSI ä
      ...
      }
    }
    

    Wenn du die Umlaute durch ae, ss etc. (oder durch ä, ß ...) ersetzen willst, ist es schwieriger - da legst du am besten ein zweites Zeichen-Array an, in das du den Eingabetext zeichenweise reinkopierst:

    char string2[100]="";
    for(i=0,j=0;i<strlen(string);++i)
    {
      switch(string[i])
      {
      case 'ä':
        strcat(string2,"ae");
        j+=2;
        break;
      ...
      default:
        string2[j++]=string[i];
      }
    }
    


  • Du könntest auch den String als char-Pointer betrachten. Dies hilft Dir speziell beim "Umlaut" durch "Umlaut+e" ersetzen. Dann musst du nur Speicher mit realloc vergrößern. Dann kanst du den Speicherbereich nach dem Umlaut um eins weiterschieben. Dann nur noch 'ä' durch 'a' ersetzen und 'e' an die nächste Stelle schreiben. Dies erfordert aber viel mehr Verständniss und ist auch alles andere als perfomant 😃



  • Hallo

    wenn du nur zeichen von A-Z, a-z und 0-9 haben willst
    kannst du ja deinen string zeichen für zeichen durchgehen und dann prüfen:

    if ( string[i] < 'A' ||
         string[i] > 'Z' &&
         string[i] < 'a' ||
         string[i] > 'z' &&
         string[i] < '0' ||
         string[i] > '9') {
      string[i] = " ";
    }
    

    mfg Kyro-0



  • Kyro-0 schrieb:

    wenn du nur zeichen von A-Z, a-z und 0-9 haben willst
    kannst du ja deinen string zeichen für zeichen durchgehen und dann prüfen:

    if ( string[i] < 'A' ||
         string[i] > 'Z' &&
         string[i] < 'a' ||
         string[i] > 'z' &&
         string[i] < '0' ||
         string[i] > '9') {
      string[i] = " ";
    }
    

    http://www.cppreference.com/stdstring/isalnum.html
    🙂


Anmelden zum Antworten