Occurence d'un caractére ds un tableau

ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006 - 27 déc. 2006 à 20:55
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 27 déc. 2006 à 22:04
Bonjour à tous.
mon programme rentre tous les caractéres d'un fichier texte dans un tableau à une dimension. Ca ca marche.
Je voudrais compter le nombre d'espace dans le tableau, le code ASCII de l'espace est 32, mais j'ai du mal à m'en servir.(je ne peux utiliser que des fonction simples) Un peu d'aide pliz...:D



#include<stdio.h>                                
#include<string.h>                                
#include<stdlib.h>    
#include     //je sais y en a un peu trop, mais ca me servira plus tard.
#include<conio.h>
#include<math.h>                

#define MAX 1000    // Nombre maximal de caractére du texte à mettre ds le tableau

int main()
{
    FILE *fichier;
    char nomfichier[100];
    char Tab[MAX];
    int i=0,j=0;

//Ouvre le fichier texte.    
    cout<<endl<<"Saisissez le nom du fichier a ouvrir: ";
    cin>>nomfichier;
    
    fichier = fopen(nomfichier,"r");
           
//remplis le tableau des caractéres du fichier.
    while(!feof(fichier))
    {        
        fscanf(fichier,"%c",&Tab[i]);
        i=i+1;
    }   

//je compte le nombre de mot en comptant le nombre d'espace; code ascii égale 32.    
    i=0; //i me permet de passer en revue le tableau
    while(i<MAX)
    {                   
         if(Tab[i]=='32') //c'est ici que ca plante,  j'ai écrit ca mais je suis pas sur du tout
              j=j+1;  //j est mon compteur d'espace  
    
    i=i+1;                       
    }
    
    cout<<"le nombre de mot est de: "<<j<<endl;
    cout<<Tab;
        
    system("PAUSE");
    return 0;

}

10 réponses

pepsidrinker Messages postés 151 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 15 avril 2009
27 déc. 2006 à 21:02
tu a mis des guillement sur ton 32....

Pepsidrinker
0
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006
27 déc. 2006 à 21:08
oups, merci ! j'ai confondu entre les caractéres qu'on met entre guillemet et les codes ascii .

Le programme se lance mais ne m'affiche pas le bon nombre d'occurence. Voyez-vous un autre probléme dans mon programme ?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 21:19
ça ne peut pas fonctionner:

1. On ne compare jamais quoi que ce soit avec une chaine de caractère. Il faut utiliser strcmp ou similaire, car lors de la compilation, la chaine dans le code sera transformé en une adresse (adresse qui pointera sur la zone mémoire qui contien la chaine) donc:if(toto "salut") sera transformer (pseudo code) if(toto 0x52351512) ce qui sera probablement toujours faux.

2. Tu "compare" un caractère (Tab[i]) avec un nombre qui en contien 2. Ça ne sera jamais vrai.

Je crois que tu n'as pas bien assimilé la matière de tes cours. Peut-être devrais tu réviser certaines notions.





C++ (@++)<!--
0
pepsidrinker Messages postés 151 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 15 avril 2009
27 déc. 2006 à 21:24
Une fois les guillement enlevé il me donne le bon nombre d'espace...

Pepsidrinker
0

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

Posez votre question
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006
27 déc. 2006 à 21:30
je ne compare pas avec le chiffre 32 mais avec le code ascii de l'espace qui est 32. Pepsidrinker me l'avait fait remarquer. je le dis dans le post suivant.

Et, (je dis peut-etre des bétises, surement d'ailleur) je ne compare pas toute une chaine, mais caractére par caractére d'une chaine.

Apres modification dans mon programme, j'obient le bon nombre d'espace mais toujours augmenté de 8. quand il y a 2 espace, ca m'affiche 10, quand y en a 40 ca m'affiche 48 ....
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 21:33
Oups, j'avais pas vue le commentaire dans le code...

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 21:36
Pour ton problème:

while(i && i<MAX)
{                   
    if(Tab[i] == 0x20) j++;
    i++;                  
}

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 21:39
pardon:
while(Tab[i] && i<MAX)
{                   
    if(Tab[i] == 0x20) j++;
    i++;                  
}

C++ (@++)<!--
0
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006
27 déc. 2006 à 21:54
merci SAKingdom, Tab[i] dans le while ca fonctionne.
J'ai pas trop saisit pourquoi il fallait rajouter ca mais ca fonctionne.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 22:04
Une chaine de caractère se termine par un 0. Mon code est équivalent a:

while(Tab[i] != 0 && i < MAX)

Comme ça, on s'arrete a la fin de la chaine. Sinon, on continue de chercher sur les zones mémoire voisines tant que i est plus petit que MAX (et on peut chercher loin comme ça).

C++ (@++)<!--
0
Rejoignez-nous