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

  FORUM HardWare.fr
  Programmation
  C++

  Comptage et décomposition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comptage et décomposition

n°2294065
ping59
Posté le 26-12-2016 à 19:05:39  profilanswer
 

Bonsoir à tous et merci déjà de venir m'aider.
 
J'ai 2 exercices à faire et j'ai quelques idées mais j'ai besoin de vous pour m'aider à bien m'orienter.
 
Le premier exercice est que dans une chaîne de caractères entré par l'utilisateur, je souhaite compter le nombres de lettres et de chiffres mais je n'arrive qu'à compter le nombres de caracteres dans la chaine mais je ne vois pas comment on peut séparer les chiffres et les lettres (à part avec la table ASCII mais ça risque de me faire un programme de fou).
 
Pour vous donner un exemple, je dois faire ceci : dans la chaîne, il y a "Je vais avoir 17 ans", je dois dire qu'il y a 19 lettres et 2 chiffres.
 
Le 2e exercice consiste à récupérer la chaîne de caractères et de découper la phrase afin d'avoir une liste avec les mots. Il faut savoir que la chaîne de caractères est dans un tableau appellé tableauCar et dans ma consigne, je prend chaque mot et le copier dans le tableau qui s'appelle tableauMot.
 
Un exemple : dans tableauCar, il y a "Je suis un programmeur" et dans tableauMot, je dois avoir tableauMot[0]=Je / tableauMot[1]=suis / tableauMot[2]=un / tableauMot[3]=programmeur
 
Pour celui ci, j'avais pensé à un pointeur avec un if qui permet de dire que si le pointeur détècte un espace, je récupère le mot d'avant et je le copie dans tableauMot[compteur] et compteur je l'incrémente de 1 à chaque espace.
 
Voila, j'espère que vous pourrez m'aider à trouver la solution :)
 
Bonne soirée / Bonne journée à tous
Et Bonne Année 2017 !!!

mood
Publicité
Posté le 26-12-2016 à 19:05:39  profilanswer
 

n°2294066
Devil'sTig​er
Posté le 26-12-2016 à 20:54:44  profilanswer
 

Pour le premier exo, converti chaque caractère en INT (pour avoir l'ascii), si c'est compris entre 48 et 57 (inclus) alors c'est un nombre, sinon c'est un caractère.
De ce fait ton code reste assez court avec cette condition.
 
Pour le deuxième exo ton idée me semble bonne ;)

n°2294067
ping59
Posté le 26-12-2016 à 20:59:05  profilanswer
 

Merci Devil
 
J'ai tenté ça mais il me met comme erreur : forbids comparison between pointer and integer mais je ne vois pas ou est l'erreur :
 
        char*ptc;
        int lettre=0, chiffre=0;
        if (ptc<=65 && ptc>=90)
        {
            lettre++;
        }
        else if (ptc<=48 && ptc>=57)
        {
            chiffre++;
        }
si le caractere est compris entre 65 et 90 je fais lettre=lettre+1
si le caractere est compris entre 48 et 57, je fais chiffre=chiffre+1
donc a la fin j'affiche lettre et chiffre pour avoir mes 2 valeurs

n°2294070
gilou
Modérateur
Modzilla
Posté le 26-12-2016 à 22:05:03  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <cctype>
  3. int main () {
  4.   char c;
  5.   int lettres(0), chiffres(0);
  6.  
  7.   std::cout << "Entrez une phrase, et terminez par un retour chariot." << std::endl;
  8.  
  9.   while (std::cin.get(c)) {
  10.     if (std::isalnum(c)) {
  11.       std::isdigit(c)?chiffres++:lettres++;
  12.     }
  13.     if (c == '\n') {
  14.       break;
  15.     }
  16.   }
  17.  
  18.   std::cout << "Il y avait " << chiffres << " chiffres et " << lettres << " lettres." << std::endl;
  19.  
  20.   return 0;
  21. }


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2294078
rat de com​bat
attention rongeur méchant!
Posté le 27-12-2016 à 12:01:14  profilanswer
 

ping59 a écrit :

Merci Devil
 
J'ai tenté ça mais il me met comme erreur : forbids comparison between pointer and integer mais je ne vois pas ou est l'erreur :
 
        char*ptc;
        int lettre=0, chiffre=0;
        if (ptc<=65 && ptc>=90)
        {
            lettre++;
        }
        else if (ptc<=48 && ptc>=57)
        {
            chiffre++;
        }
si le caractere est compris entre 65 et 90 je fais lettre=lettre+1
si le caractere est compris entre 48 et 57, je fais chiffre=chiffre+1
donc a la fin j'affiche lettre et chiffre pour avoir mes 2 valeurs

À part le fait que c'est pas du C++, le problème c'est l'étoile. Tu déclares un pointeur sur un char mais tu veux un char.
 
PS: Pour la prochaine fois, le code entre balises stp. http://forum-images.hardware.fr/icones/message/c.gif


Message édité par rat de combat le 27-12-2016 à 12:01:46
n°2294084
gilou
Modérateur
Modzilla
Posté le 27-12-2016 à 16:07:14  profilanswer
 

Noter que pour ce genre de chose, le fait qu'on soit en C++ ne joue pas des masses, on aurait aussi bien pu l’écrire en C:

Code :
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. int main () {
  4.   int lettres = 0, chiffres = 0;
  5.  
  6.   printf("Entrez une phrase, et terminez par un retour chariot.\n" );
  7.   while (char c = getchar()) {
  8.     if (c == EOF) {
  9.       printf("Erreur en lecture!" );
  10.       break;
  11.     }
  12.     if (c == '\n') {
  13.       printf("Il y avait %d chiffres et %d lettres.", chiffres, lettres);
  14.       break;
  15.     }
  16.     if (isalnum(c)) {
  17.       isdigit(c)?chiffres++:lettres++;
  18.     }
  19.   }
  20.  
  21.   return 0;
  22. }


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2294096
rat de com​bat
attention rongeur méchant!
Posté le 27-12-2016 à 21:06:41  profilanswer
 

gilou a écrit :

Noter que pour ce genre de chose, le fait qu'on soit en C++ ne joue pas des masses, on aurait aussi bien pu l’écrire en C:

En tTout à fait exact :jap: , mais le sujet dit C++, alors autant faire du vrai C++. Il y a pas mal de gens qui mélangent/confondent/... les deux.


Message édité par rat de combat le 27-12-2016 à 22:00:40
n°2294111
gilou
Modérateur
Modzilla
Posté le 28-12-2016 à 00:01:22  profilanswer
 

Certes, mais c'est typiquement le genre de chose qui n'exploite en rien les capacités du C++.
A la limite, pour les exploiter, faudrait utiliser la locale courante, ca compterait aussi les caractères accentues. Mais g++ sous windows ne sait pas utiliser de locale autre que C ou POSIX, alors...
 
A+,


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

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

  Comptage et décomposition

 

Sujets relatifs
Algorithme de décompositionDecomposition chaine de caractère
Tableau et ComptageProbleme de comptage (SQL Oracle)
Parcours et comptage de motcomptage de fichiers dans un repertoire en fonction d'une date
Décomposition d'une applicationDécomposition d'un programme.
[Batch] Script de comptage du nombre d'occurrences dans un fichier[chaine] Décomposition d'une adresse postal
Plus de sujets relatifs à : Comptage et décomposition


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