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)

String in Gross- oder Kleinbuchstaben umwandeln

Patrick (Moderator) am 06.02.2006 um 13:29

#include <stdio.h>
#include <stdlib.h> // malloc
#include <string.h> // strlen



/*
  wandelt den uebergebenen String in Kleinbuchstaben um
*/
void _lc(char *s){
     unsigned i=0;

     while (*(s+i)){
           if       (*(s+i)>64 && *(s+i)<91)
                    *(s+i)+=32;
           i++;
           }

     return;
     }



/*
  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++);

     *(p+i)=0;
     return p;
     }



/*
  wandelt den uebergebenen String in Grossbuchstaben um
*/
void _uc(char *s){
     unsigned i=0;

     while (*(s+i)){
           if       (*(s+i)>96 && *(s+i)<123)
                    *(s+i)-=32;
           i++;
           }

     return;
     }



/*
  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++);

     *(p+i)=0;
     return p;
     }



int main(){
    char *ptr;
    char string[]="Hallo Welt.";

    // Vorher
    printf("string: %s\n", string);

    // Kleinbuchstaben
    ptr=lc(string);
    printf("ptr: %s\n", ptr);
    printf("string: %s\n", string);

    _lc(string);
    printf("string geaendert: %s\n", string);

    // Aufraeumen
    puts("\n");
    free(ptr);
    ptr=NULL;

    // Grossbuchstaben
    ptr=uc(string);
    printf("ptr: %s\n", ptr);
    printf("string: %s\n", string);

    _uc(string);
    printf("string geaendert: %s\n", string);

    return 1;
    }

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

 
Huhu,

wärs nicht sinnvoll, die Funktionen umzubenennen, um Konsistenz zu anderen Sprachen herzustellen?

In anderen Sprachen heissen die Funktionen meistens tolower und toupper...

Bis denne

Martin

--
0xC0FFEE

 
Moinmoin,

sind tolower und toupper nicht Funktionsnamen der C-Standardlib für Zeichen-, statt Stringumwandlungen?

Gruß,
Livi
 
Hi,

Zitat:

sind tolower und toupper nicht Funktionsnamen der C-Standardlib für Zeichen-, statt Stringumwandlungen?


Aua, du hast natürlich recht. Ich meinte strtolower/upper

Bis denne

Martin

--
0xC0FFEE

 
Martin:

Ich habe mich bei der Namensvergabe an Perl orientiert.
Die Funktionen heissen dort lc() um eine "lowercased" Version und uc() um eine "uppercased" Version des übergebenen Strings zu bekommen.
Ich habe aber nichts dagegen, wenn die Funktionen andere Namen bekommen sollen - es fallen mir blos keine sinnvollen ein Grafik: Smilie Zwinker

Gruß und schönes Wochenende,
Patrick-Oliver

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

 
  • (nur registrierte Mitglieder)