You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Wednesday, November 8th 2006, 10:46am

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 ;)



C Quellcode

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

2

Wednesday, November 8th 2006, 11:35am

for( i=0; i< strlen(str) && i < 400; i++)

3

Wednesday, November 8th 2006, 11:45am

Erstmal danke für die bessere Darstellung ;)

Danke für den tipp phax, allerdings gibt es dabei aber noch ein problem:

<i> wird zwar konstant um 1 erhöht, die string-Länge allerdings nicht; z.B. wird "ä" durch "ae" ersetzt, d.h. der string ist um ein Zeichen länger geworden.

Ich hoffe mir ist da jetzt kein Denkfehler unterlaufen ;)

4

Wednesday, November 8th 2006, 2:23pm

Probiers mal ca. so:

C Quellcode

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

5

Thursday, November 9th 2006, 9:26am

dankesehr, hab noch eine kleine frage:

wie kann ich diese funktion in ein kleines main umwandeln, zum kompilieren?

6

Thursday, November 9th 2006, 8:38pm

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <crtdbg.h>
#include <string.h>
#include ...
 
char* replaceUmlaut ...
 
int main (int argc, char** argv)
{
  char s[400];
  strcpy (s, "Hällö Wörld");
  printf ("%s\n", replaceUmlaut (s, strlen (s)));
  return 0;
}

Social bookmarks