http://www.pronix.de -> Forum -> C-Programmieren -> Code-Schnipsel

Unterseiten

Code-Schnipsel

Moderatoren: broesel, Martin Conrad, Patrick

Thema: String in Gross- oder Kleinbuchstaben umwandeln

  • (nur registrierte Mitglieder)
Zitat:

Ich habe mich bei der Namensvergabe an Perl orientiert.


*unschuldigindieLuftguck* gehen wir mal davon aus, dass ich meine Studien zu Perl ein wenig vernachlässigt habe? Grafik: Smilie Zwinker

Bis denne, auch schönes WE!

Martin

--
0xC0FFEE

 
...und sowieso lieber gleich toupper/-lower aus der ctype.h nehmen, die funktionieren dann auch mit wide char und sind locale dependent.

Gruss,
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 
broesel:

Die Funktionen tolower und toupper wandeln aber immer nur ein Byte um. Um einen kompletten String in Groß- oder Kleinbuchstaben umzuwandeln müsste man pro Byte tolower bzw. toupper aufrufen.

--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.

 
Zitat:

Die Funktionen tolower und toupper wandeln aber immer nur ein Byte um.


Nein, ein int. Aber man muss natürlich nach wie vor zeichenweise konvertieren (aber nicht jedes Zeichen ist nur ein Byte lang bzw. durch Addition/Subtraktion einer Konstante in Groß-/Kleinschreibung zu konvertieren).

Gruss,
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 
Hallo,

super, den Code kann ich gerade super brauchen.

Allerdings wenn ich das Programm unter MS VS 2008 compiliere erhalte ich folgende Ausgabe:

Zitat:

string: Hallo Welt.
ptr: =hallo welt
string: hallo welt.
string geaendert: hallo welt.

ptr: =HALLO WELT
string: hallo welt.
string geaendert: HALLO WELT.


Mit MinGW passt die Ausgabe, aus irgendeinem Grund erfolgt de Umwandlung in der *lc und *uc eine Stelle zu weit rechts...

Mit folgendem Code funktioniert es auch unter VS 2008:



/*
  wandelt eine Kopie des uebergebenen Strings in Kleinbuchstaben um;
  Rueckgabewert NULL bei Fehler oder Adresse auf Kopie;
  braucht stdlib.h und string.h
*/
char *lc(char *s){
     unsigned i=0;
     char *p;

     if   (NULL == s)
          return NULL;

     if   ((p = (char *) malloc(sizeof(char) * strlen(s) + 1)) == NULL)
          return NULL;

     while (*(s+i))
	 {
           *(p+i) = (*(s+i)>64 && *(s+i)<91) ? *(s+i)+=32 : *(s+i);
		   i++;
	 }
     *(p+i)=0;
     return p;
}

/*
  wandelt eine Kopie des uebergebenen Strings in Grossbuchstaben um;
  Rueckgabewert NULL bei Fehler oder Adresse auf Kopie;
  braucht stdlib.h und string.h
*/
char *uc(char *s){
     unsigned i=0;
     char *p;

     if   (NULL == s)
          return NULL;

     if   ((p = (char *) malloc(sizeof(char) * strlen(s) + 1)) == NULL)
          return NULL;

     while (*(s+i))
	 {
           *(p+i) = (*(s+i)>96 && *(s+i)<123) ? *(s+i)-32 : *(s+i);
		   i++;
	 }
     *(p+i)=0;
     return p;
}




 
  • (nur registrierte Mitglieder)