Retrouver le nbre de mot dans une chaine

Sabetodo Messages postés 127 Statut Membre -  
Sabetodo Messages postés 127 Statut Membre -
Bonjour,
salut les gars!!il y a juste un petit probleme dont j'arrive pas à me debarasser. Au fait, je dois faire un petit programme permettant de retrouver le nbre de mot dans une chaine en C. Moi j'y suis presque arrive.Mon programme , au lieu de m'afficher le nombre de mot dans la chaine, il m'affiche le nombre de caractere.
voici mon code:

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

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

if(argc>2)
exit(EXIT_FAILURE)
else
{
for(i=0;i<strlen(argv[1]);i++)
{
if(argv[1][i]!=' ')
{
compteur++;
}
}
printf("%d",compteur);
}
printf("\n");
}

NB: Aidez-moi les gars.
A voir également:

4 réponses

jackred Messages postés 245 Statut Membre 13
 
c'est normal le symbole ' ' veut tout simplement dire n'importe quel caractère, ce n'est pas un espace.

pour rechercher l'espace, il faudrait que tu mette le code ASCII de l'espace à rechercher
0
Sabetodo Messages postés 127 Statut Membre 3
 
alors quel est le code ascci d'espace?
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
c'est normal le symbole ' ' veut tout simplement dire n'importe quel caractère, ce n'est pas un espace
Non, en C ' ' signifie bel et bien le code ascii de l'espace !
0
Sabetodo Messages postés 127 Statut Membre 3 > fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention  
 
En fait je sais pas si t'as bien compris mon raisonnement. tout ce que je voulais faire c'est d'essayer de compter le nmbre de mot dans la chaine. je dis si on ne retrouve pas d'espace incrémente mon compteur;ainsi de suite jusqu'au dernier caractere. ensuite j'affiche le compteur. Mais ça ne regle pas mon probleme vu qu'il ne m'affiche que le nombre de mot. j'ai essaie de remplace les simples guillemets par le code ascii de l'espace mais quand même ça ne passe pas.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Sabetodo Messages postés 127 Statut Membre
 
C'est toi qui ne m'a pas bien compris je pense.
Tu fais ton test, sur argv[1], mais argv[1] ne peut pas contenir d'espaces. argv[1] est composé d'un seul mot. Si lors du passage des arguments tu as des espaces, ils seront ignorés et répartis dans argv[1], argv[2], etc.
Donc compter le nombre de mots dans argv[1] n'a aucun sens.
Le nombre de mots est tout simplement argc - 1 (nombre d'arguments - 1).

Après si tu veux faire un test, il faut utiliser sur une vraie chaîne.
Par exemple sur :
char *ch="coucou ceci est un test";
char cpt=0;
for(int i=0;i<strlen(ch);i++)
  if (ch[i] == ' ') cpt++;
printf("nombres de mots : %d\n",cpt+1);

Le code ascii ' ' marche très bien, contrairement à ce qui a été dit ;)
0
Sabetodo Messages postés 127 Statut Membre 3 > fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention  
 
ok, voila t'avais raison! je vais essayer de modifier mon code.mais la chaine que t'as initialiseé la-bà, je n'en ai pas trop besoin puisque tous ces arguments seront fournis à partir de la ligne de commnade unix.merci pour la correction.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
Tu te compliques bien la vie, et en plus ça ne pourra pas marcher.
A chaque mot (un espace) envoyé en arguments correspond un nouvel argument.
Donc tester, si tu as argv>2 et quitter, tu sauras qu'au max tu as un argument (mot). Et puis rien te garanti que tu en auras au moins un vu que tu ne testes pas si argc > 1.

En fait, si tu dois savoir le nombre de mots passés en arguments du programme, c'est très simple, c'est strictement argc - 1.
Pas besoin de boucle.
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
32 en décimal
A+
0
Sabetodo Messages postés 127 Statut Membre 3
 
merci beaucoup, mais lorsque je compile en comparant par rapport au code ascii de l'espace il m'affiche toujours des erreurs.je sais pas pourquoi.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Sabetodo Messages postés 127 Statut Membre
 
A priori tu n'as pas lu mon message.

Tu te compliques bien la vie, et en plus ça ne pourra pas marcher.
A chaque mot (un espace) envoyé en arguments correspond un nouvel argument.
Donc tester, si tu as argv>2 et quitter, tu sauras qu'au max tu as un argument (mot). Et puis rien te garanti que tu en auras au moins un vu que tu ne testes pas si argc > 1.

En fait, si tu dois savoir le nombre de mots passés en arguments du programme, c'est très simple, c'est strictement argc - 1.
Pas besoin de boucle.
0
Sabetodo Messages postés 127 Statut Membre 3 > fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention  
 
si je n'utilise pas la boucle comment je pourrais savoir le nbre de mot passe en argument mon cher?
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Sabetodo Messages postés 127 Statut Membre
 
Lis mon message #10.
0
nikko77 Messages postés 1090 Statut Membre 127
 
wouaaaaaaaa c'est quoi ce charabia???!!!! Vous parlez de quoi en fait? c'est du programmage?
0