Problem bei Funktion zum Umlaute ersetzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem bei Funktion zum Umlaute ersetzen

    Diese Funktion ersetzt deutsche Sonderzeichen in bestimmten strings. Ich soll diese Funktion so abändern, dass der neue string mit den ersetzen Umlauten (newstr) eine maximale Länge von 400 haben kann, bzw die Funktion dann abbricht. Nur hab ich 0 Plan von C ;)



    Quellcode

    1. char *replaceUmlaut( char *str, int len )
    2. {
    3. FUNKTION ("replaceUmlaut", "");
    4. char newstr[400], buffer[2]; //
    5. char dec;
    6. int i;
    7. ENTER;
    8. TRACEB(trctext("\nSTR mit Umlauten<%i>,<%i> <%s>\n",len,strlen(str),str));
    9. memset( newstr, '\0', sizeof( newstr ));
    10. memset( buffer, '\0', sizeof( buffer ));
    11. for( i=0; i< strlen(str); i++, )
    12. {
    13. dec = (int)str[i];
    14. if( dec == '\216' )
    15. strcat( newstr, "0" );
    16. else
    17. if( dec == '\192' )
    18. strcat( newstr, "A" );
    19. else
    20. if( dec == '\193' )
    21. strcat( newstr, "A" );
    22. /* (....) */
    23. else
    24. if( dec < 128 && dec > 0)
    25. {
    26. buffer[0] = str[i];
    27. strcat( newstr, buffer );
    28. }
    29. }
    30. memset( str, '\0', len );
    31. strncpy( str, newstr, len-2 );
    32. TRACEB(trctext("\nSTR ohne Umlaute<%i>,<%i> <%s>\n",len,strlen(str),str));
    33. TRACEB(trctext("\nSTR ohne Umlaute<%i>,<%i> <%s>\n",len,strlen(str),str));
    34. LEAVE;
    35. return str;
    36. }
    Alles anzeigen
  • Probiers mal ca. so:

    Quellcode

    1. char *replaceUmlaut( char *str, int len )
    2. {
    3. FUNKTION ("replaceUmlaut", "");
    4. char newstr[400];
    5. unsigned char *pOld = (unsigned char*) str;
    6. char *pNew = newstr;
    7. ENTER;
    8. TRACEB(trctext("\nSTR mit Umlauten<%i>,<%i> <%s>\n",len,strlen(str),str));
    9. memset( newstr, '\0', sizeof( newstr ));
    10. while (*pOld && (pNew - newstr) < 400)
    11. {
    12. if( *pOld == '\216' )
    13. *pNew++ = 'O';
    14. else
    15. if( dec == '\192' )
    16. *pNew++ = 'A';
    17. else
    18. if( dec == '\193' )
    19. *pNew++ = 'A';
    20. /* (....) */
    21. else
    22. if( *pOld < 128 )
    23. *pNew++ = *pOld++;
    24. }
    25. strncpy( str, newstr, min (len, strlen (newstr) );
    26. TRACEB(trctext("\nSTR ohne Umlaute<%i>,<%i> <%s>\n",len,strlen(str),str));
    27. LEAVE;
    28. return str;
    29. }
    Alles anzeigen