Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1379 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Compter le nombre de caractères en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compter le nombre de caractères en C

n°2348685
xameal
Posté le 19-03-2020 à 13:01:03  profilanswer
 

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 !

mood
Publicité
Posté le 19-03-2020 à 13:01:03  profilanswer
 

n°2348733
rat de com​bat
attention rongeur méchant!
Posté le 19-03-2020 à 17:37:06  profilanswer
 

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.

n°2348749
xameal
Posté le 19-03-2020 à 19:39:17  profilanswer
 

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 !

n°2348751
rat de com​bat
attention rongeur méchant!
Posté le 19-03-2020 à 20:15:52  profilanswer
 

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("........." );


 
 
 

n°2349040
gilou
Modérateur
Modzilla
Posté le 22-03-2020 à 14:12:35  profilanswer
 

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é!  --
n°2349485
xameal
Posté le 25-03-2020 à 13:55:04  profilanswer
 

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)

n°2349739
gilou
Modérateur
Modzilla
Posté le 27-03-2020 à 10:36:11  profilanswer
 

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é!  --
n°2349810
xameal
Posté le 27-03-2020 à 16:39:13  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Compter le nombre de caractères en C

 

Sujets relatifs
[C++] Eviter les .h dans les .hPuisssance d'un nombre(fonction récursive)
FileReader et caractères accentuésMono Develop C# , création de class
Menu en MVVM C#[C++] Transformer une minuscule en majuscule
selectionner une suite de chiffres dans une routine de tri C++Exercice de tableau basique en C URGENT !
[MySQL] Ajouter un nombre à une colonne nullC# - comment faire un algorithme de calcul de parité d'un octet
Plus de sujets relatifs à : Compter le nombre de caractères en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR