CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Decomposition d'entrées

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 19:06:44

Bonjour,

Je voulais savoir s´il existe un moyen de décomposer une entrée en lettres et la stoquer quelque part ?

Par exemple, on entre dans le programme un mot (le mieux serait une phrase), et on peut transformer les lettres en chiffres qu´il nous retourne.

Merci :)

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 19:10:36

Je l´ai mis dans le titre, mais je ne l´ai pas mis ici, je voudrais que ce soit en C++ , merci :)

godrik
godrik
Niveau 30
19 avril 2007 à 19:11:47

transformer les letres en chiffres ?
tu veux dire
$./a.out deux
2

?

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 19:13:58

Aucune idée, je veux pouvoir en effet transformer les lettres en chiffre. Le programme doit simplement stoquer le mot, et par exemple, s´il est dans un tableau, je pourrais prendre chacune des lettres, et selon la lettre que c´est, je la transorme en une suite de chiffre.

godrik
godrik
Niveau 30
19 avril 2007 à 19:15:23

heu, bah, sinon, il faut lire les caractere de l´entre standard les un apres les autres.
char c;

while (!std::cin.eof())
{
std::cin>>c;
do_something(c);
}

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 19:17:42

Je ne connais pas cette fonction, elle s´arraitera quand exactement, et comment accéder aux caractères à chaque boucle ?

dnob700
dnob700
Niveau 10
19 avril 2007 à 20:31:30

précise un peu ce que tu veux.

Car si tu fait :

char chaine[255];
scanf("%s",chaine); //ici il y a de bon arguments pour prendre toutes une phrase, Cf tuto de JYY.

ensuite chaine est un tableau de nombre sur lequel tu peut faire ce que tu veux.

chaine[5] est le "nombre" (code ascii) qui corespond au cinquième caractère de ta chaines.

Ou alors, j´ai pas compris ce que tu veux.

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 21:11:00

scanf("%s",chaine) demande la phrase, c´est ça ? Et ensuite je l´ai dans chaine[] ? Si c´est ça, c´est parfait :)

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 21:34:05

Voilà ce que j´ai fait mais j´ai une erreur critique

  1. include <iostream>
  2. include <stdlib.h>
  3. include <stdio.h>

using namespace std;

int main()
{
char chaine[255] = {0};
int chiffr[255] = {0};
cin >> chaine;
int a = 1;
while (chaine[a] != 0)
{
if (chaine[a] == "a")
chiffr[a]=1;
if (chaine[a] == " ")
chiffr[a]=10;
if (chaine[a] == "b")
chiffr[a]=555;
}
cout << endl;
for (int b = 1 ; chiffr[b] != 0 ; b++)
{
cout << chiffr[b];
}
cout << endl;
system ("PAUSE");
return 0;
}

Dev C++ me dit qu´il est interdit de comparer un entier à un pointeur (au niveau des if), or je n´utilise aucun pointeur, où est le problème?

tauruxbis
tauruxbis
Niveau 10
19 avril 2007 à 21:41:02

au passage je remplace

int a = 1;
while (chaine[a] != 0)
{
}

par

for (int a = 1 ; chaine[a] != 0 ; a++)
{
}

dnob700
dnob700
Niveau 10
19 avril 2007 à 22:54:13

désolé pour mon précédent post, je me suis manifestement trompé de topic en le postant...

il faut initialiser a à 0 et non pas à 1 pour parcourir toutes ta chaines.
Il ne faut pas initialiser tes tableau avec {0}, du moins, je ne pense pas, car de toutes manière scanf mets ce qu´il faut dedans.
"a" est une chaine de caractères qui contient le caractère ´a´ puis le caractère ´\000´ (un 0 en ascii), elle est donc représentée par un pointeur.
Pour comparer chaine[a] avec quelque chose, il faut le comparer avec un caractère, donc if (chaine[a]==´a´) (et non pas "a"). Pareil pour b et pour l´espace bien sûr.

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 16:44:19

D´accord, c´est des petits détails qui m´ont échappés, je vais essayer de suite.

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 16:53:28

Humm, j´ai un petit problème. Déjà je voudrais savoir où est le ´ , car je n´ai que le ´.

Et en plus, quand j´utilise le ´ , le programme me met cette erreur : "stray ´\180´ in program. et que de plus la comparaison sera toujours fausse (sur les if) du fait de la portée limité de la variable (data type comme il dit :) )

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 16:56:50

Bon apparamment c´est un truc de Jeuxvideo.com que de convertir les apostrophes en ce signe (je n´ai pas le même signe en copiant l´apostrophe de jeuxvideo.com qu´en la mettant directement)...

Mais même avec ça j´ai un problème, si j´utilise les apostrophes normales, le while ne s´arrête jamais, j´entre la chaîne "aba", et le while (chaine[a] != ´\000´) n´est jamais vrai, ni pour =0 ni pour =´0´

dnob700
dnob700
Niveau 10
20 avril 2007 à 17:37:44

je ne suis pas sur de moi pour le ´\000´ donc essaye avec 0 (juste le chiffre zéro, sans aucun guillemets ou apostrophes).

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 17:51:02

Comme je disais, ça ne marche ni pour

= ´\000´
= ´\0´
= ´0´
= 0

Peut être faut-il initialiser la chaine autrement ?

dnob700
dnob700
Niveau 10
20 avril 2007 à 18:34:30

tu peut remettre ton code ?

tu initialise bien tes a à 0 et non pas à 1 ? (le premier caractère est chaine[0] et non pas chaine[1]).

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 18:56:12

Tiens j´ai changé mon while en for et ça marche (j´avais dit que je le changeais dans les messages précédents, mais je ne l´avais pas fait sur le programme), mais pas sur que ce soit pour ça.

Quoiqu´il en soit ça ne marche pas exactement. Si j´initialise a à 0 ou 1, ça me donne 5551 (au lieu de 15551), pour toute autre initialisation, ça ne donne rien.

Le code :

  1. include <iostream>
  2. include <stdlib.h>
  3. include <stdio.h>

using namespace std;

int main()
{
char chaine[255] = {0};
int chiffr[255] = {0};
cin >> chaine;
for (int a = 0; chaine[a] != ´\000´ ; a++)
{
if (chaine[a] == ´a´)
chiffr[a]=1;
if (chaine[a] == ´c´)
chiffr[a]=333;
if (chaine[a] == ´b´)
chiffr[a]=555;
}
cout << endl;
for (int b = 1 ; chiffr[b] != 0 ; b++)
{
cout << chiffr[b];
}
cout << endl;
system ("PAUSE");
return 0;
}

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 18:58:53

Bon il faut oublier l´initalisation à 1, en fait elle ne marche plus ^^

Quoiqu´il ne soit le programme semble me sauter le premier caractère !

tauruxbis
tauruxbis
Niveau 10
20 avril 2007 à 18:59:43

Je suis un âne... je n´ai pas mis b=0... tout s´explique !

Bon eh bien merci, tout marche !!

:-d

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment