Compter caractère mot

Fermé
psyH - 19 août 2011 à 18:50
 psyH - 24 août 2011 à 00:56
Bonjour, je voudrais savoir comment compter le nombre de caractère d'une phrase ? en C ou C++

merci de votre aide



A voir également:

20 réponses

up !
0
Quelqu'un pourrait m'aider ? merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 20/08/2011 à 16:38
Bonjour,

Il y a plusieurs méthodes. Tu peux par exemple compter le nombre de caractères jusqu'au '\0'.

Cdlt,

Google is your friend
0
Salut,

Mais je ne sais pas comment faire, j'ai fait un programme mais qui me donne pas dutout ce que je veux...

merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 août 2011 à 16:15
Commence par poster ton programme qu'on puisse t'aider, ça sera plus simple...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bon si tu veux ^^



#include <stdio.h>
#include <stdlib.h>

int main()
{
   char Caractere;
   scanf("%c", &Caractere);

    while(Caractere != '\n')
{
    printf("%c", Caractere);
    Caractere = Caractere + 1;

}

    return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 août 2011 à 16:41
Ton but est de compter le nombre de caractères dans une phrase. Il faut donc deux choses au minimum : la variable caractère et la variable phrase.

Pour commencer, tu peux mettre : char *phrase="Je suis une phrase";
Ensuite, il faudra compter le nombre de caractères de phrase. Pour cela une boucle for. La condition sera "tant que différent de '\0' et non de '\n'.

Tiens compte de mes remarques et reposte :-)
0
Je ne connais pas '\0' , c'est censé faire quoi ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 août 2011 à 16:56
Une chaîne de caractère se termine par un '\0'.
En faisant donc : while (*p != '\0') en incrémentant p, vous connaîtrez le nombre de caractères de la phrase.
0
j'ai fait ça,


#include <stdio.h>
#include <stdlib.h>

int main()
{
   char caractere;
   char phrase;

   scanf("%c", &caractere);

    for (caractere; caractere != '\0'; caractere++)

 {
        printf("%c", caractere);
    }

    return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 20/08/2011 à 21:08
Une phrase est un tableau de caractère, c'est donc de la forme char [] ou char* comme j'ai mis dans mon exemple. char représente seulement un caractère.
Voici ce que je propose :
#include <stdio.h> 
#include <stdlib.h> 

int main (void) { 
   char nbCar=0; 
   const char *phrase="Je suis une phrase"; 
   char *p=phrase; 
    
   while ( *p != '\0' ) { 
      p++; 
   } 
   printf("nb de caracatères : %d\n", nbCar); 

   return 0; 
} 

Ceci peut être optimisé mais pour commencer c'est pas trop mal. Sinon il y a la fonction strlen() qui existe déjà.

Cdlt,
0
Merci, mais ce n'est qu'un début de code, c'est bien ça ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 20/08/2011 à 21:07
Beh, mon code est fonctionnel.
Mais il reste à compter le nombre de caractères dans la phrase.
Et à toi de l'améliorer selon tes attentes.
0
Ok oui, parce que quand je compile, il me donne nb caractere : 0 et c'est tout.

Et sinon, comment utiliser strlen ?

merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 août 2011 à 21:09
Beh il te restait à mettre après le p++, nbCar++; pour incrémenter le nombre de caractères. C'est tout... Souhaiterais-tu un tutorial pour comprendre ? Car c'est la base cet exercice.
Sinon pour strlen, il suffit de mettre : strlen(phrase); et ça te donne directement le nombre de caractères.
0
salut,

j'ai modifié un peu le code, pour que l'utilisateur entre une phrase :


#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
   char nbCar; 
   char phrase; 

   scanf("%c", &phrase); 

   while ( phrase != '\0' ) 
   { 
      phrase++, nbCar++; 
   } 

   printf("%d\n", nbCar); 

   return 0; 
} 


mais quand je mets des caractère, il affiche un mauvais chiffre.

Sinon, j'apprends le C++ sur le site du zéro, et le C va avec mais c'est vrai que pour le coup en C++ j'avais pas trop d'idée.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 août 2011 à 22:09
Attention à ne pas mélanger le C et le C++, ce sont deux langages différents.
En plus, ton programme est faux.
Comme je t'ai dit plus haut : une phrase doit être stockée dans un tableau de caractère. Il s'agit donc de mettre char []. Par exemple char phrase[256];
Ce n'est pas scanf("%c", &phrase); qu'il faut mettre mais : scanf("%s", phrase); ou mieux scanf("%255s", phrase);
De plus tu as enlevé le pointeur char *p que j'avais mis et qui faisait que ça marche.
0
Pourquoi tu mets un 256 dans char phrase ? ^^
scanf("%s", phrase); Pourquoi un s ?

merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 août 2011 à 22:21
Pourquoi tu mets un 256 dans char phrase ? ^^
char phrase, signifie que tu réserves une case dans la mémoire (pile) pour stocker un caractère. char phrase[256]; signifie que tu réserves 256 cases dans la mémoire pour stocker 256 caractères (incluant le '\0' qu'on a vu). Je suis parti du principe que ta phrase ferait 255 caractères maximum, mais tu peux changer.

scanf("%s", phrase); Pourquoi un s ?
Un s, c'est pour permettre à l'utilisateur de taper plusieurs caractères. Si, tu mets %c, il ne stockera que le premier caractère dans la variable.
0
ok d'accord, c'est clair, je vais essayer de re faire le code plus tard, je te tiens au courant, merci encore
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
20 août 2011 à 23:33
fiddy, je sais pas comment tu fais pour pas perdre patience ...
tu repond jamais a coté, toujours a expliqué exactement ce que tu fais afin d'etre comprehensible pour tous ...

les gens a qui tu réponds ont beaucoup de chance !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
21 août 2011 à 13:01
Merci pour le compliment, c'est trop d'honneur ;-))).
0
j'avoue ^^

j'ai refait le programme avec tes conseils fiddy. Le programme marche quand on entre les caractère à la suite mais si on met des espaces entre, il compte le nombre de mots :


#include <stdio.h>
#include <stdlib.h>

int main (void)
{

   char nbCar=0;
   char phrase[256];
   char *p=phrase;

    scanf("%255s", phrase);

   while ( *p != '\0' )

   {
      p++, nbCar++;
   }

   printf("nb de caracteres : %d\n", nbCar);

   return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
21 août 2011 à 20:33
Normal. scanf("%255s", phrase); ne prend qu'une phrase sans espace, donc un mot.
Dans ce cas, il faut plutôt utiliser fgets(phrase, sizeof phrase, stdin);
Mais c'est un peu plus compliqué, car le caractère '\n' sera stocké également dans phrase (s'il y a de la place).
0
Oui, j'ai modifié le code, et j'entre les caractères, il me donne 3 alors que j'ai mis seulement 2. Comment pallier à ce problème ?

merci fiddy
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
21 août 2011 à 20:51
Beh, s'il rajoute le caractère '\n', il suffit de mettre - 1.
Ou alors au lieu de tester while(*p!='\0') vous mettez while(*p!='\n')
0
ça y est, ça marche, merci beaucoup fiddy :D
0
Re Salut, je sollicite encore ton aide fiddy, parce que je voudrais faire le même type de programme mais différemment, sans l'utilisation des pointeurs donc j'ai codé ça :


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

char phrase[256];
char nbCaractere;

scanf("%s", &phrase);


while(phrase != '\0')

{
nbCaractere++;
}

printf("%d", nbCaractere);

return 0;
}


Mais marche pas..

merci beaucoup
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 23/08/2011 à 08:33
scanf("%s", &phrase);
Ce n'est pas &phrase, qu'il faut mettre mais phrase comme j'avais mis plus haut.

while(phrase != '\0')
Le compilateur doit te signaler un problème. phrase est de type char* alors que '\0' est de type char. Si tu souhaites faire ainsi, il te faut une variable supplémentaire : int i = 0;
Et ensuite tu mets : while (phrase[i]!='\0') { i++; nbCaractere++;}
N'oublie pas non plus d'initialiser nbCar à 0; (int nbCaractere = 0;).
Et enfin n'oublie de mettre un saut de ligne avant le return 0; par exemple : printf("%d\n",nbCaractere);
0
Oui j'ai refait le code :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

   char phrase[256];
   int nbCaractere = 0;
   int i = 0;

   scanf("%s", phrase);


    while (phrase[i]!='\0')

    {
        i++; nbCaractere++;
    }


   printf("%d\n", nbCaractere);

   return 0;
}



Mais quand on mets deux mots par exemple, il mets 2 et non, le nombre de caractère..


merci
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 août 2011 à 20:16
Il met plutôt le nombre de caractère du premier mot.
Je vous invite à relire le message : https://forums.commentcamarche.net/forum/affich-22932995-compter-caractere-mot#24

Cdlt
0
Salut,

Voici le code, donc quand je met un mot, il met 1, quand je mets deux mots, ça marche mais il ne compte pas l'espace entre.


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

   char phrase[256];
   int nbCaractere = 0;
   int i = 0;

   scanf("%s", phrase);

fgets(phrase, sizeof phrase, stdin);

    while (phrase[i]!='\0')

    {
        i++; nbCaractere++;
    }


   printf("%d\n", nbCaractere);

   return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 août 2011 à 23:27
Tu mets scanf("%s",) et fgets...
Soit c'est l'un soit c'est l'autre.
Dans votre cas, il faut juste mettre fgets.
Ensuite, comme dis plus haut, n'oubliez pas de metre phrase[i]!='\n' dans le while avec fgets.
0
A oui logique.... erreur vraiment c*** jfais plutôt du C++ mais bon, ça me permet d'apprendre aussi le C

J'viens de regarder un tutoriel sur fget() c'est plus clair à présent et le programme marche,merci infiniment fiddy.
0