pour voir si un caract est un expace, tab ou enter

pour voir si un caract est un expace, tab ou enter - C++ - Programmation

Marsh Posté le 05-02-2003 à 22:26:51    

on peux mettre ca?
 
if ((c==' ';)||(c=='/n';)||(c=='/t';))
 
paske ca a l'air de pas marcher.

Reply

Marsh Posté le 05-02-2003 à 22:26:51   

Reply

Marsh Posté le 05-02-2003 à 22:27:55    

t'y étais presque... les caractères d'échappement, c'est un backslash donc '\n' et '\t'

Reply

Marsh Posté le 05-02-2003 à 22:32:05    

++Taz a écrit :

t'y étais presque... les caractères d'échappement, c'est un backslash donc '\n' et '\t'


 
effectivement  :whistle: merci
 
mais ca marche tjr pas. donc j'ai du faire une autre connerie
 
en vitesse comme ca personne ne voit?
 

Code :
  1. while((d=getc(texte))!=EOL)
  2.  {
  3.    test=1;
  4.    tot++;
  5.    c=tolower(d);
  6.    for(j=0; j<i; j++)
  7.      {
  8.     if ((c==' ')||(c=='\n')||(c=='\t')){v++;}
  9.     else
  10.    {
  11.      if (c==tab[j].s)
  12.      {
  13.        tab[j].n++;
  14.        test=0;
  15.        break;
  16.      }
  17.   
  18.            if(test)
  19.    {
  20.      tab[i].s=c;
  21.      tab[i].n=1;
  22.      i++;
  23.    }
  24.     }
  25.    }
  26. }

Reply

Marsh Posté le 05-02-2003 à 22:35:20    

je comprends pas trop ton code vu qu'il est incomplet et que tu ne dis pas ou est le problème. une seule chose: la fin de fichier c'est EOF et pas EOL (inconnu au bataillon d'ailleurs)
 
edit: quand test=0, la boucle ewt breakée, donc le code if(test) ne s'executera jamais


Message édité par Taz le 05-02-2003 à 22:36:32
Reply

Marsh Posté le 05-02-2003 à 22:38:26    

++Taz a écrit :

je comprends pas trop ton code vu qu'il est incomplet et que tu ne dis pas ou est le problème. une seule chose: la fin de fichier c'est EOF et pas EOL (inconnu au bataillon d'ailleurs)


 
en fait c un code qu'un pote a fait et j'essaye de rajouter des trucs par dessus. mais ca foire sur certain point.
 
dans ce cas le prob c'est le passage que j'ai rajouté
 
if ((c==' ';)||(c=='\n';)||(c=='\t';)){v++;}  
    else  
 
sans ca ca marche mais avec ca en resultat j'ai le bon nombre de caractere (tot)  mais v reste a 0 et le tablo n'affiche rien, ni les lettre ni les nombres d'apparition de chaque lettre.

Reply

Marsh Posté le 05-02-2003 à 22:42:01    

et pour le code complet
 

Code :
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #define EOL '~'
  4. #define NMAX 1000
  5. struct signe
  6. {
  7.   char s;
  8.   int n;
  9. };
  10. void tri(struct signe x[100])
  11. {int i, perm=1;
  12. struct signe tmp;
  13. while(perm=1){
  14. perm=0;
  15. for (i=0;i<40;i++){
  16.  if(x[i].s>x[i+1].s){
  17.   tmp=x[i];
  18.   x[i]=x[i+1];
  19.   x[i+1]=tmp;
  20.   perm=1;
  21.  }
  22. }
  23. }
  24. }
  25. void stat(struct signe tab[100], int x)
  26. {int j,t,i=100,f;
  27. t=100/x;
  28. for(j=0; j<i; j++)
  29. {f=tab[j].n*t;
  30. tab[j].n=f;
  31. }
  32. }
  33. void main ()
  34. {
  35. FILE *texte;
  36. struct signe tab[100];
  37. char c, d, txt[40];
  38. int tot=0, i=0, j, test, v=0;
  39. //printf("\nintroduisez le nom du fichier a analyser:\n" );
  40. //gets(txt);
  41. texte=fopen ("texte.txt","r" );
  42. while((d=getc(texte))!=EOL)
  43.  {
  44.    test=1;
  45.    tot++;
  46.    c=tolower(d);
  47.    for(j=0; j<i; j++)
  48.      {
  49.     if ((c==' ')||(c=='\n')||(c=='\t')){v++;}
  50.     else
  51.    {
  52.      if (c==tab[j].s)
  53.      {
  54.        tab[j].n++;
  55.        test=0;
  56.        break;
  57.      }
  58.   
  59.            if(test)
  60.    {
  61.      tab[i].s=c;
  62.      tab[i].n=1;
  63.      i++;
  64.    }
  65.     }
  66.    }
  67. }
  68. //tri(tab);
  69. //stat(tab,tot);
  70. printf("\n\n\nCaractere\tNombre" );
  71. for(j=0; j<i; j++)
  72.  {
  73.    printf("\n%c\t\t%d",tab[j].s, tab[j].n);
  74.  }
  75. printf("\n\nTotal de caracteres: %d\n\n", tot);
  76. printf("%d\n",v);
  77. fclose(texte);
  78. }


 
bon faut pardonner le faible nivo mais ca fait 10 mois qu'on avait plus toucher a la prog et on a fait ca sur le tas aujourd'hui faut le temps de s'y remettre.

Reply

Marsh Posté le 05-02-2003 à 22:47:32    

tu ferais bien de tester la fin de fichier en plus de EOL. et indentes un peu, je suis fatigué et ton code est asez illisible
 
et puis ce genre de prototyp c'est bof
void stat(struct signe tab[100], int x)
 
d'habitude on ecrit
void stat(struct signe *tab, size_t n_elements, int x, ....) au cas ou les éléments de tab sont modifiés.
 
et void stat(const struct signe *tab, ....) dans le cas contraire

Reply

Marsh Posté le 05-02-2003 à 22:54:56    

ok mais j'arrive tjr pas a obtenir un resultat, l'execution du prog me donne
 
 
 
 

Caractere       Nombre
 
Total de caracteres: 2777
 
0
Press any key to continue

Reply

Marsh Posté le 05-02-2003 à 22:56:20    

ben c'est on algo, deroule à la main

Reply

Marsh Posté le 05-02-2003 à 22:59:43    

Mon niveau n'est pas meilleur, mais un truc me "choque" en regardant de près :
au début i vaut 0
puis la boucle
for(j=0; j<i; j++) part de j = 0 et s'arrête à i - 1
donc au premier tour, on n'y passe pas dans cette boucle, donc on n'incrémente pas i, donc il reste nul, donc le for(j=0; j<i; j++) n'aura jamais lieu, donc i restera à zéro tout le temps.
Du moins il me semble. :ange:  :D  
 
Y a un truc qui m'"arrache" les yeux ;) (mais suis qu'amateur auto-didacte donc suis pas très fortiche) :
void tri(struct signe x[100]) la dimension 100, elle sert à quoi ? Le tableau peut passer sous forme de pointeur, vu qu'il doit déja être dimensionné en externe avant appel.
             
           

Reply

Marsh Posté le 05-02-2003 à 22:59:43   

Reply

Marsh Posté le 05-02-2003 à 23:11:00    

heu ouai je crois que je vais refaire tout le code ca sera plus simple paske la y a rien qui marche.
 

Reply

Marsh Posté le 06-02-2003 à 05:46:26    

Code :
  1. if( (c==' ')||(c=='\n')||(c=='\t') ) ...


:non:

Code :
  1. #include <ctype.h>
  2. if( isalpha(c) ) ...

Edit: J'avais mis isampha.


Message édité par Musaran le 07-02-2003 à 05:02:51

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 06-02-2003 à 06:38:06    

islpha

Reply

Marsh Posté le 06-02-2003 à 07:23:16    


 
isalpha   :whistle:  
 
mais merci quand meme.

Reply

Marsh Posté le 06-02-2003 à 13:06:24    

:lol:

Reply

Marsh Posté le 07-02-2003 à 00:23:06    

C'est normal, ++Taz et moi on est du même niveau... :lol:


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 10-02-2003 à 13:18:49    

pour tester si c'est un espace y'a une methode assez simple :
Dans le ctype.h
y'a la fonction isspace pour tester si c'est un espace ou non.
Par contre pour les autres fonctions isalpha, isdigit, ispunct, ... ca ne devrait pas t'aider pour tester une tab ou la touche entrée.
 
Cédric

Reply

Marsh Posté le 10-02-2003 à 13:21:02    

ou alors passé par les codes ASCII 0x0D, etc. si çà marche tjs pas.

Reply

Marsh Posté le 10-02-2003 à 15:16:30    

moi il me semble que isspace détecte aussi si c'est une tabulation.
 
et la touche entrée ne correspond à rien: il faut juste regarder si c'est '\n'. jamais le code ascii

Reply

Marsh Posté le 10-02-2003 à 16:09:20    

ouai de toute facon c bon on va reprendre tout le projet de 0 pour mieux structurer ca donc ce prog on laisse tomber.  
 
par contre on va devoir faire un prog d'optimisation combinatoire par metaheuristique sur base du paradigme de la fourmillier. la on va peux etre avoir besoin d'aide pour certain bout de code  :D


Message édité par eraser17 le 10-02-2003 à 16:09:50
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed