Je ne parle même pas de ça (pour unicode, c'est pas char, mais wchar_t, c'est encore autre chose), mais de la différence entre les code OEM (IBM PC8) et ANSI (ISO-8859-1), par exemple.
Type: Messages; Utilisateur: Emmanuel Delahaye
Je ne parle même pas de ça (pour unicode, c'est pas char, mais wchar_t, c'est encore autre chose), mais de la différence entre les code OEM (IBM PC8) et ANSI (ISO-8859-1), par exemple.
c est la variable qui contient la valeur du caractère à compter.
/* lire le texte, mettre a jour les compteurs. */
{
int c;
while ((c = getchar ()) != EOF)
tab[26] : compteur de lettres
c - 'a' = indice si le codage des caractères est consécutif et croissant.
tab[index]++
Mais ce n'est pas à moi qu'il faut le demander car je me tue à expliquer...
Ce code n'est certes pas portable (car lié à un codage particulier qui est l'ASCII), mais il peut être ecrit d'une façon plus correcte en utilisant les constantes caractères à la place de ces nombres...
Je fatigue...
Encore une fois, faire des hypothèses sur le fait que les caractères soient codés en ASCII n'apporte qu'une solution ponctuielle, mais pas universelle.
C'est quand même pas...
Tu recodes strchr(). Ca prends 4 lignes... Tu peux même faire une fonction qui retourne l'indice directement...
Et si c'est pas de l'ASCII ? Le C ne garantit pas que les valeurs soit consécutives (En EBCDIC, elle ne le sont pas).
Et si on doit traiter les accentuées ?
Moi, je te donne une solution...
Ok, classique.
Le problème est qu'on ne connait pas la valeur numérique. Soit on fait un switch-case de 26 lettres (et les minuscules/majuscules, accentuées, ponctuation ?), soit on attribue une...
Gné ? Et pourquoi pas
int a;
/* ...*/
if ( a == 'z' )
{
printf("C'est un 'z' !\n");
}
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.