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++] transformer un string en int

sonic66
sonic66
Niveau 10
17 août 2005 à 14:57:54

Voila , pour pouvoir progresser je me suis mit en tete de faire une calculette , n´ayant aucune idée de comment la faire , j´ai commencé par vouloir faire un code permettant de mettre les operateurs dans des strings et les chiffrens dans des int , voici le resultat :

http://rafb.net/paste/results/3I1cky24.html

Comme vous pouvez le voir , ca bug au moment de la conversion , vien la mes questions :

le bug est-il du au fait que cette convertion est impossible?

si la convertion est impossible que puis je faire a la place?

sonic66
sonic66
Niveau 10
17 août 2005 à 15:02:06

:d) vien la mes questions :

:honte:

corection :ange:

:d) voici donc mes questions

MrGoTo
MrGoTo
Niveau 8
17 août 2005 à 15:31:18

Tu ne peux pas transformer un string en int. La seule façon serait de regarder chaque lettre pour en faire un nombre.

gollumkawder
gollumkawder
Niveau 10
17 août 2005 à 16:03:36

Si tout les types etaient convertibles en autres types sans altération des données de la variable ça ne servirait pas a grand chose d´avoir plusieurs types..

Ton int ne prends que les chiffres entiers ( donc meme si tu convertis un float en int, le resultat sera différent).

le_duche
le_duche
Niveau 10
17 août 2005 à 16:05:33

Si tu veux t´inspirer, j´ai fait une calculatrice complète en c++ ( avec sinus, cosinus, sin hyperbolique,...) qui fonctionne et qui est dans ton idée...

Je peux te filler le code demain si tu veux, mais la je suis pas chez moi...

sonic66
sonic66
Niveau 10
17 août 2005 à 16:30:16

Ouais je veut bien! :)

sonic66
sonic66
Niveau 10
17 août 2005 à 16:31:11

Mais j´ai une question , quel est la meilleur maniere pour transformer chaque lettre du string en nombre?

Vengeur41
Vengeur41
Niveau 10
17 août 2005 à 16:47:52

Tu regarde tous les caractères de la chaine et on regarde le code ASCII du caractère est entre 30 et 39 ( 30 et 39 comptés) , on compte le nombre de ces caractères. Et après ont récupère ces caractères un a un et on les multiplie par 10^(le nombre de caractères- " multiplication"). Mettons que la chaine soit :
" Score : 4567, blablabla"

Le programme regarde le ´S´ etc jusqu´à ce qu´il tombe sur un 4, là il commence à compter le nombre de chiffres :
caractère = ´4´ : stocker les caractères dans une autre chaine à partir de maintenant : compteur++;
caractère = ´5´ : compteur++;
caractère = ´6´ : compteur++;
caractère = ´7´ : compteur++;
caractère = ´,´ : stopper la boucle

Nous avons là 4 nombres dans notre nouvelle chaine " 4567".

On repasse sur cette chaine.

i=0;
compteur_multiplic = compteur;
tant que i<compteur
nombre_trouve +=
(nouvellechaine[i]-30)*10^(compteur-compteur_multi
plic);

compteur_multiplic++:

finboucle

Enfin en gros c´est ca, c´est le bordel dans mon explication je sais mais bon.

le_duche
le_duche
Niveau 10
17 août 2005 à 16:49:05

ben pour transformer un string en nombre tu dois utiliser le code ASCII. Je ne le connais plus par coeur, mais supposons que le SYMBOLE 0 soit codé par 45, alors pour tranformer un CHIFFRE ( pas un nombre à plusieurs chiffres) il faut faire
valeur = ( int)symbole - 45;

si tu veux transformer un NOMBRE de plusieurs CHIFFRES en valeur, tu dois faire une boucle qui multiplie tes valeurs individuelles des chiffres pas des puissance de 10.

Au fait, est ce que tu programme sous dev ?

et est-ce que tu maitrise les pointeurs ? pcq j´ai tout fait par liste plutot que des vecteurs...

le_duche
le_duche
Niveau 10
17 août 2005 à 16:50:24

ben visiblement c´est donc
valeur = ( int)symbole - 30; ^^

sonic66
sonic66
Niveau 10
17 août 2005 à 16:52:40

ok , j´ai a peu pres compris ^^

merci a vous :)

sonic66
sonic66
Niveau 10
17 août 2005 à 16:57:11

je vais finir les annexes du site de jyy la :)

mais moi je veut faire une calculette un peu specaile ( quand j´aurais le niveau ^^)
en fait , c´est pas trop original mais j´aimerai si on le souhaite qu´elle mette les details du calcul :) !

sonic66
sonic66
Niveau 10
17 août 2005 à 16:58:35

et au fait venguer , tu l´as encore conio.h ? ( ton petit rpg etait en couleur ^^) :hap:

Vengeur41
Vengeur41
Niveau 10
17 août 2005 à 17:12:05

Je l´ai mais il faut que j´installe Dev-c++ 4.9.7.0 pour le récupérer.
Je le ferai sans doute un de ces jours.
Mais je croyais que bloodshed avait mis un package conio complet a disposition des utilisateurs...

novembre
novembre
Niveau 18
17 août 2005 à 17:21:46

Pour passer une chaine de caractères en int, il faut utiliser la fonction atoi :

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/atoi.3.html

le_duche
le_duche
Niveau 10
17 août 2005 à 18:15:14

mais elle ne traite pas les nombres à virgule, tandis que l´autre, il n´y pas à changer grand chose pour qu´elle puisse le faire aussi

dnob700
dnob700
Niveau 10
17 août 2005 à 18:18:18

vangeur : pourquoi faire 2 passage ? tu peut très bien lire les nombre dès le premier passage en multipliant le total précédent pas 10 à chaque nouveau nombre.

J´ai peut-être lu un peu vite, mais est ce que la solution d´utiliser les fonction itoa et atoi pour convertir des chaine en entier et des entier en chaine ne conviendrait pas à sonic ?

turbulator
turbulator
Niveau 10
17 août 2005 à 18:29:48

Il me semble que itoa marche pas par défaut sous devcpp et avec gcc ( je suis plus sur). Il existe une autre fonction qui permet de convertir vers une chaine de caractères et dans cette fonction on doit choisir la base dans laquelle on converti. Je me suis déjà servi de cette fonction qui est completement portative seulement je sais plus dans quoi ni le nom de cette fonction ( il me semble que c´est du genre ***printf(int valeur,int base, char *chaine)

Mis à part ca, Je suis comme dnob700, je pense que itoa suffit, vu qu´il parle de convertir vers un entier

novembre
novembre
Niveau 18
17 août 2005 à 18:40:38

Bon ca yé j´ai retrouvé cette fonction pas mal qui converti int -> chaine
c´est sprintf()

( je crois que ca marche aussi de float -> chaine)

http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0014.html

le_duche
Posté le 17 août 2005 à 18:15:14
mais elle ne traite pas les nombres à virgule, tandis que l´autre, il n´y pas à changer grand chose pour qu´elle puisse le faire aussi

Dans un tel cas, on utilise itof. itoa, itof,.... ya pas mal de fonctions utile de base.

PS: Je précise que je suis Turbulator, sinon ce que je dis perd un peu de sens)

Vengeur41
Vengeur41
Niveau 10
17 août 2005 à 18:43:45

En fait on cherche l´inverse, Novembre.

Oui mais atoi(char*) ne marche que sur les chaines du genre " 135" pas sur " Score : 135" il me semble.

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