Forum Programmation.c remplacant standard pour strlwr

Posté par  .
Étiquettes : aucune
0
27
sept.
2005
Bonjour tout le monde!
ouala, au taff je m'occupe de porter une lib de windows a linux.
Rien de bien mechant pour l'instant, si ce n'est un appel a la fonction strlwr, qui comme son nom l'indique presque, convertit un char* en char* lower case.

Et evidemment, cette tabernacle de fonction n'est pas ANSI!!
donc pas definie dans la libc.

Et donc j'en arrive a ma question : est ce qu'il ya un equivalent standard (ie qui compile aussi sous windows sans ajouter de libs) ou est ce qu'il faut que je me farcisse une fonction de conversion ?
Et si oui lequel?

je sais, c'est pas grand chose a ecrire vu que ca prend que des char* , mais bon si ya moyen de reutiliser quelque chose existant, autant le faire, ca m'evitera de rajouter du code etc.
  • # Pas d'équivalent...

    Posté par  . Évalué à 5.

    ... dans la bibliothèque standard, mais si tu ne travailles que sur des chaînes ANSI, ceci devrait faire l'affaire :

    #include <ctype.h>

    void strlwr(char *string)
    {
    while ( (*string = tolower(*string ++)) );
    }

    L'avantage par de tolower() par rapport à un bidouillage des valeurs ASCII c'est qu'il gère la locale.

    Si tu utilises des wchar_t, remplace ctype.h par wctype.h et utilises towlower().
  • # strlwr

    Posté par  . Évalué à 3.

    #include <ctype.h>
    #include <string.h>

    char * strlwr(char * str)
    {
    int i;
    int lg = strlen(str);
    for(i=0;i<lg;i++)
    str[i]=tolower(str[i]);

    return str;
    }


    naivement je dirais que c bon, et que c pas trop long a faire, donc pourquoi ne pas le rajouter, ca ne mangera pas grand chose
  • # merci

    Posté par  . Évalué à 3.

    pour les deux reponses.

    J'ai encore 2 -3 trucs a faire avant de porter ce code, je vous tiens au courant, mais ca a effectivement l'air de correspondre pile poile a ce que je veux.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.