web-dev-qa-db-fra.com

Comment puis-je mettre une chaîne en minuscule en C?

Comment convertir une chaîne à la casse mixte en une chaîne minuscule en C?

91
Tony Stark

C'est dans la bibliothèque standard, et c'est la manière la plus simple que je puisse voir pour implémenter une telle fonction. Alors oui, il suffit de parcourir la chaîne et de convertir chaque caractère en minuscule.

Quelque chose de trivial comme ça:

#include <ctype.h>

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

ou si vous préférez une doublure, vous pouvez utiliser celle de J.F. Sebastian:

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

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

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

(pour le codepage latin bien sûr)

6
Oleg Razgulyaev

Si vous avez besoin de la prise en charge Unicode dans les minuscules, consultez la question suivante: bibliothèque Unicode Light C

1
Eduardo

Si nous allons être aussi bâclés que d'utiliser tolower(), procédez comme suit:

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

Mais bon, ça explose un peu si vous lui donnez des symboles/chiffres, et en général c'est mal. Bonne question d'entrevue, cependant.

1
Ken S

Traitez-vous simplement les chaînes ASCII et n'avez pas de problèmes de paramètres régionaux? Dans ce cas, ce serait un bon moyen de le faire.

1
Mark Byers