Compter le nombre de caractères en C

Compter le nombre de caractères en C - C - Programmation

Marsh Posté le 19-03-2020 à 13:01:03    

Bonjour / Bonsoir !  
 
Je me suis mis à programmer en C, et mon objectif et de pouvoir compter le nombre de caractère d'une phrase, sans compter les caractères spéciaux ( "$", "," , "." etc... ). J'ai fais un programme qui compte le nombre de caractère, mais malgré des conditions à l'aide du tableau ASCII ça ne marche pas :( !
Voici ce que j'ai fais :
 
#include <stdio.h>
#include <stdlib.h>
 
// Je rentre ma chaîne de caractère en question en paramètre ( ici str )
void nombreDeCaractere(char *str){
 int number_of_char = 0;
 // La boucle for convertie toutes les minuscules en majuscules pour ne pas à avoir à différencier dans le tableau ASCII par la suite
 for (int i = 0; str[i] != '\0'; i++) {
  str[i] = toupper(str[i]);
 }
 
 int j=0;
  //Boucle pour compter le nombre de caractères  
 while (str[j] != '\0') {
 
  // Condition pour compter seulement les lettres majuscules ( comprise entre 65 et 90 d'après le tableau ASCII )
  if (str[j]>=65 && str[j] <= 90) {
   number_of_char++;
   j++;
  } else {
   j++;
  }
 
 }
 printf("Il y'a %d caracteres", number_of_char);
}
 
Merci d'avance !

Reply

Marsh Posté le 19-03-2020 à 13:01:03   

Reply

Marsh Posté le 19-03-2020 à 17:37:06    

Je parle en bref, fatigué...
 
1) Le code entre balises stp. [cpp ]CODE[ / cpp]
2) Il manque un prototype de toupper() qui se trouve dans ctype.h.  
3) Vu 2): Active les warnings!!! gcc: -Wall -Wextra -Werror
4) Ça veut dire quoi "ne marche pas"? Erreur mémoire par hasard? Montre nous l'appel de ta fonction, il y a une subtilité. Renseigne toi aussi sur "const", ça peut servir.

Reply

Marsh Posté le 19-03-2020 à 19:39:17    

Ah désolé je ne savais pas pour les règles de présentation avec

Code :
  1. ...

, pour le #include <ctype.h> je l'ai fais mais je l'ai pas copier coller... Pas de souci à ce niveau.
Et tous simplement, ma fonction sans la condition if retourne un résultat juste en fonction de cque j'écris en print MAIS qui compte ducoup les espaces etc... Par contre lorsque je rajoute la condition if, il me retourne 0, et je ne comprend pas pourquoi.
 
Je connais "const" ( variable qui ne peut pas être modifié, c'est bien ça ? ) mais je ne pense pas qu'elle me soit utile ici, à moins qu'il y'a une autre méthode que celle que j'ai tenté pour faire ce programme
 
Merci déjà d'avoir pris le temps de répondre :D !

Reply

Marsh Posté le 19-03-2020 à 20:15:52    

Ton code fonctionne très bien. Si je lui donne "abc123     " il me sort 3 comme prévu. Pour la mise en page tu peux toujours éditer en haut.
 
Par contre comme tu modifies la chaîne il faut que cette dernière soit modifiable, soit  

Code :
  1. char str[]=".......";
  2. nombreDeCaractere(str);


 
mais pas

Code :
  1. nombreDeCaractere("........." );


 
 
 

Reply

Marsh Posté le 22-03-2020 à 14:12:35    

A la base, il y a un truc qui ne me plait pas dans ton code : void nombreDeCaractere
Tu ne nommes pas bien ta fonction.
Il faut choisir entre int nombreDeCaracteres et void printNombreDeCaracteres mais choisis un nom qui reflète ce que fait ta fonction.
 
J'aurais fait cela ainsi :

Code :
  1. int countLetters(char *string) {
  2.   int count = 0;
  3.   if (string != NULL) {
  4.     do {
  5.       if (isalpha(*string)) ++count;
  6.     } while(*++string) ;
  7.   }
  8.   return count;
  9. }


et pour du code employé en production, j'aurais vérifié en plus que count n'atteignais pas INT_MAX, et utilisé une valeur négative pour signaler une erreur.
 
A+,


Message édité par gilou le 22-03-2020 à 14:53:03

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-03-2020 à 13:55:04    

Merci pour vos réponses !  
Ce que je ne comprend pas, c'est que pour vous le code marche, mais pour moi il me signale 2 erreurs qui m'empêchent d'exécuter mon code, je ne les avaient jamais eu :
 
Gravité Code                   Description                                                                         Projet        Fichier                     Ligne  
Erreur LNK1169 un ou plusieurs symboles définis à différentes reprises ont été rencontrés    Lab5ex18_b   Lab5ex18_b.exe                      1  
Erreur       LNK2005    _printNombreDeCaractere déjà défini dans main.obj                                  Lab5ex18_b   Lab5ex18_b.exe                      1
 
Je ne comprend pas ces erreurs, qu'est ce que "main.obj" ? pk y'a t_il une erreur dans un .exe ? Je n'ai rien touché à ce niveau la et ai quand même des erreurs   :pt1cable: (vive la programmation)

Reply

Marsh Posté le 27-03-2020 à 10:36:11    

Ben fais voir ton code au complet, car sinon on ne peut pas répondre.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-03-2020 à 16:39:13    

Très bizarre mais mon code marche maintenant, je n'ai rien toucher.  
A ce qu'il parait c'est peut être un problème de référence obsolète de l'IDE ou il faut "Nettoyer le projet" puis rebuild le programme.
Donc on peut mettre en résolu, puisqu'au final mon code marche :) .
Merci à vous d'avoir pris le temps de répondre !
Bonne journée à vous.

Reply

Sujets relatifs:

Leave a Replay

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