[C++] Comptage de caractères sur tableaux
Fermé
Biloo
-
13 nov. 2010 à 22:58
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 nov. 2010 à 00:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 nov. 2010 à 00:01
A voir également:
- [C++] Comptage de caractères sur tableaux
- Caractères ascii - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Tableaux croisés dynamiques - Guide
- Exemple de mot de passe à 8 caractères - Guide
9 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 13/11/2010 à 23:07
Modifié par KX le 13/11/2010 à 23:07
Tu parles de caractères en C++, moi je pense std::string !
Finalement ce que tu fais c'est du C, et à mon avis tu as oublié de décaler '\0' à chaque fois.
La confiance n'exclut pas le contrôle
Finalement ce que tu fais c'est du C, et à mon avis tu as oublié de décaler '\0' à chaque fois.
La confiance n'exclut pas le contrôle
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
13 nov. 2010 à 23:28
13 nov. 2010 à 23:28
Bonjour,
A mon avis strlen(tab) c'est pas bon : strlen calcule la taille d'une string et pas d'un tableau.
Pour calculer la taille d'un tableau tu peux faire sizeof(tab).
Le problème là c'est que ton tableau est statique char tab[MAX] (donc dans tous les cas, sizeof(tab) te retournera 100)
Donc je te conseille soit de faire un char* tab que tu alloueras dynamiquement
soit tu utilises les vector (dans ce cas ne pas oublier #include<vector> puis pour la déclaration vector<char> tab ;
A mon avis strlen(tab) c'est pas bon : strlen calcule la taille d'une string et pas d'un tableau.
Pour calculer la taille d'un tableau tu peux faire sizeof(tab).
Le problème là c'est que ton tableau est statique char tab[MAX] (donc dans tous les cas, sizeof(tab) te retournera 100)
Donc je te conseille soit de faire un char* tab que tu alloueras dynamiquement
soit tu utilises les vector (dans ce cas ne pas oublier #include<vector> puis pour la déclaration vector<char> tab ;
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 nov. 2010 à 23:40
13 nov. 2010 à 23:40
Si strlen(tab) fonctionne très bien.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci de ta réponse, mais on est vraiment très limités...
L'allocation dynamique et les vector ne sont pas pour tout de suite pour nous^^
Merci en tout cas :)
Tu me conseillerais pas de remplacer le strlen par un compteur ?
L'allocation dynamique et les vector ne sont pas pour tout de suite pour nous^^
Merci en tout cas :)
Tu me conseillerais pas de remplacer le strlen par un compteur ?
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
13 nov. 2010 à 23:46
13 nov. 2010 à 23:46
dans ce cas tu peux parcourir ton tableau mais il faut que tu stockes le "$" aussi.
tu crées ton tableau et tu l'initialises (par exemple que des 'x').
Si tu as déclaré par exemple un tab de 5 caractères et que tu rentres la chaine to$, ton tableau aura donc (t o $ x x).
Ensuite tu parcours ton tableau, et tu incrémentes un compteur au fur et à mesure des cases et quand tu tombes sur le $ tu t'arrêtes : comme ça tu devrais avoir la taille du tableau
tu crées ton tableau et tu l'initialises (par exemple que des 'x').
Si tu as déclaré par exemple un tab de 5 caractères et que tu rentres la chaine to$, ton tableau aura donc (t o $ x x).
Ensuite tu parcours ton tableau, et tu incrémentes un compteur au fur et à mesure des cases et quand tu tombes sur le $ tu t'arrêtes : comme ça tu devrais avoir la taille du tableau
Pourquoi que des 'x' ? Initialiser la taille n'est-elle pas suffisante ? D'ailleurs, comment tu fais pour mettre que des 'x' dans ton tableau?
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
13 nov. 2010 à 23:59
13 nov. 2010 à 23:59
Alors non initialiser la taille je ne pense pas que ce soit suffisant car dans ton tableau on ne sait pas vraiment ce qu'il y a au départ......
Alors pourquoi des 'x' ? Bonne question ! Tu peux mettre aussi des '0' ou autre chose....peut-être même mettre NULL ça marcherait !
alors pour remplir un tableau c'est tout simple :
Alors pourquoi des 'x' ? Bonne question ! Tu peux mettre aussi des '0' ou autre chose....peut-être même mettre NULL ça marcherait !
alors pour remplir un tableau c'est tout simple :
for (int i=0;i<MAX;i++) tab[i] = NULL ;
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 14/11/2010 à 00:02
Modifié par fiddy le 14/11/2010 à 00:02
Bonjour,
strlen fonctionne très bien.
Et pour ma part tu peux utiliser un tableau de char comme tu le fais avec une taille statique. Le but de l'exercice, je pense, ne se situe pas à ce niveau.
Sinon, une petite erreur :
Tu parcours de 0 à MAX inclus. Tu parcours donc un caractère hors chaîne. D'autant plus que tu fais une lecture parfois avec i+1 dans la boucle...
Ensuite, l'algorithme n'est pas correct.
Tu regardes les espaces consécutifs et après tu traites les signes de ponctuations. Imagine la chaîne "cou ?cou".
Avec ton algorithme, tu obtiendras "cou cou" (deux espaces), au lieu de "cou cou".
Si l'utilisateur est un peu farceur, par exemple qu'il rentre une chaîne "cou $ cou", ton programme ne s'arrêtera pas au caractère '$'. Il faut traiter ce cas.
Dans les caractères de ponctuations, tu n'es pas exhaustif. Il manque l'apostrophe, le point virgule et quelques autres. Je te conseille de faire une fonction, cela te facilitera le code.
Cdlt,
Google is your friend
strlen fonctionne très bien.
Et pour ma part tu peux utiliser un tableau de char comme tu le fais avec une taille statique. Le but de l'exercice, je pense, ne se situe pas à ce niveau.
Sinon, une petite erreur :
Tu parcours de 0 à MAX inclus. Tu parcours donc un caractère hors chaîne. D'autant plus que tu fais une lecture parfois avec i+1 dans la boucle...
Ensuite, l'algorithme n'est pas correct.
Tu regardes les espaces consécutifs et après tu traites les signes de ponctuations. Imagine la chaîne "cou ?cou".
Avec ton algorithme, tu obtiendras "cou cou" (deux espaces), au lieu de "cou cou".
Si l'utilisateur est un peu farceur, par exemple qu'il rentre une chaîne "cou $ cou", ton programme ne s'arrêtera pas au caractère '$'. Il faut traiter ce cas.
Dans les caractères de ponctuations, tu n'es pas exhaustif. Il manque l'apostrophe, le point virgule et quelques autres. Je te conseille de faire une fonction, cela te facilitera le code.
Cdlt,
Google is your friend