Chaines de caracteres

Résolu/Fermé
chimou-gaga Messages postés 24 Date d'inscription samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 - 3 mars 2013 à 13:59
chimou-gaga Messages postés 24 Date d'inscription samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 - 5 mars 2013 à 19:45
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 mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
3 mars 2013 à 14:31
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 samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
3 mars 2013 à 14:53
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 mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
5 mars 2013 à 18:29
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 mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
5 mars 2013 à 19:11
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 samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
5 mars 2013 à 19:45
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