c – convertir une chaîne de casse mixte en minuscules

Quelle est la meilleure façon / plus propre de convertir une chaîne de casse en une minuscule en C?

C’est dans la bibliothèque standard, et c’est le moyen le plus simple de voir une telle fonction. Donc oui, il suffit de parcourir la chaîne et de convertir chaque caractère en minuscule.

Quelque chose de sortingvial comme ça:

for(int i = 0; str[i]; i++){ str[i] = tolower(str[i]); } 

ou si vous préférez un paquebot, alors vous pouvez utiliser celui-ci par JF Sebastian:

 for ( ; *p; ++p) *p = tolower(*p); 

convertir en minuscule équivaut à augmenter le bit 0x60:

 for(char *p = pstr;*p;++p) *p=*p>0x40&&*p<0x5b?*p|0x60:*p; 

(pour codepage latin bien sûr)

Est-ce que vous traitez uniquement des chaînes ASCII et n’avez pas de problèmes de parameters régionaux? Alors oui, ce serait un bon moyen de le faire.

Si vous avez besoin du support Unicode dans la fonction minuscule, voir cette question: Bibliothèque Light C Unicode

Si nous allons être aussi négligent que tolower() , faites ceci:

 char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {} 

Mais bon, ça explose un peu si on lui donne des symboles / chiffres, et en général c’est mal. Bonne question d’entretien, cependant.