Chaines de caracteres

Résolu
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   -  
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je commence à manipuler les chaines en programmation C,
Je souhaite calculer le nombre des chiffres, lettres et symboles dans une chaine de caractere.
j'ai essayé ça mais ça ne marche pas :

#include <stdio.h>
#include <string.h>
void main ()
{
	int nchiffre, nlettre , autre,longueur,i;
	char chaine[100];
/*introduire la chaine*/
	printf ("introduire une chaine");
	scanf_s(chaine);
	/*stocker la longeure de la chaine*/ 
	longueur =strlen(chaine); 
	/*initialistation des compteurs*/
	nchiffre=0;nlettre=0;autre=0;
	/*parcourir la chaine et test sur chaque caractere*/
	for (i=0;i<longueur;i++)
	{
		if chaine[i] in ["0".."9"]
		{
			nchiffre = nchiffre+1;
		};
		else if chaine[i] in ["a".."z"]
		{
			nlettre= nlettre+1;
		};
		else autre=autre+1;
	};
	printf ("le nombre des chiffres est %d ,le nombre des lettres est %d et le nombre des symboles est %d",nchiffre,nlettre,autre);
}

Il y en a 6 erreurs que je ne sais pas comment corriger. et je me demande si le teste par les intervalles in [] est correcte ou pas.
Merci d'avance.


1 réponse

p3t3r42 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   28
 
Salut,

Eh, il va falloir que tu revois la syntaxe du C ^^. On ne met pas de point virgule après les accolades d'une structure. De plus, je ne crois pas que le test sur les intervalles existent en C... Et puis les caractères s'écrivent entre deux apostrophes. Et on met des parenthèses après un if. Et ...

Bon, en fait cela donne plutôt :
	if('0' <= chaine[i] && chaine[i] <= '9') // voilà une syntaxe le compilateur appréciera ;)
	{
		nchiffre++; // C'est plus simple d'incrémenter une variable ainsi
	}// pas de point ';' ici
	else if ('a' <= chaine[i] && chaine[i] <= 'z')
	{
		nlettre++;
	} // pas de ';' ici non plus
	else
		autre++;


Regarde ce que ça donne avec ça, essaie de comprendre tes erreurs...
1
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   3
 
Merci infiniment pour tes remarques ainsi que pour te reste du programme.
Au fait, parfois le compilateur me demande d'ajouter des points virgules apres les accolades.
Finalement, il reste encore une erreur au niveau de longueur =strlen(chaine);
0
p3t3r42 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   28
 
Je ne vois pas en quoi longueur = strlen(chaine); peut poser problème. Est-ce le compilateur qui t'indique une erreur, ou remarques-tu simplement un dysfonctionnement du programme à cause de ça ? Dans le 2ème cas, peut-être que la chaine que tu donnes en parametre à strlen n'est pas correcte.
Je suspecte la fonction scan_s, que je n'ai jamais vu. A ta place j'utiliserais plutôt : scanf("%s", chaine);
0
p3t3r42 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   28
 
Je viens de voire la doc sur la fonction scanf_s, elle ressemble à la fonction scanf mais avec quelques spécificitées supplémentaires. Je te conseille d'utilisé scanf qui est plus simple.
0
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   3
 
J'ai modifié le code, au lieu de stocker la longueur de la chaîne (affectant longueur = strlen(chaine) ) j'ai utilisé directement strlen dans le compteur , maintenant ça marche ! merci beaucoup .
0