Extraire deux chiffres d'un un nombre
Résolu
Bonjour,
je suis juste debutant en c/c++. je veux un coup de pouce svp.
je voudrais ecrire une fonction qui prend en parametre un int de 6 chiffre par ex(123786) et me renvoi les deux du milieu. ie 37 pour mon exemple.
quelqun peut il maider ?
jen serai reconnaissant
plus precisement je veux pouvoir lire une date sous cette forme par exemple 010209 (1er fev 2009)
et y extraire le mois, le recuprer dans un int
merci d'avance
je suis juste debutant en c/c++. je veux un coup de pouce svp.
je voudrais ecrire une fonction qui prend en parametre un int de 6 chiffre par ex(123786) et me renvoi les deux du milieu. ie 37 pour mon exemple.
quelqun peut il maider ?
jen serai reconnaissant
plus precisement je veux pouvoir lire une date sous cette forme par exemple 010209 (1er fev 2009)
et y extraire le mois, le recuprer dans un int
merci d'avance
Configuration: Windows Vista Firefox 3.0.10
3 réponses
-
Le plus simple c'est de l'écrire dans un buffer avec un sprintf et de récupérer les morceaux qui t'intéressent.
#include <stdlib.h> #include <string.h> #include <stdio.h> int main(){ int x = 123456,y; char buffer[7]; // contiendra "123456\0" char buffer2[3]; // contiendra "34\0" sprintf(buffer,"%i",x); if(strlen(buffer) == 6){ strncpy(buffer2,buffer + 2 ,2); // copie buffer[2] et buffer[3] dans buffer2 buffer2[2] = '\0'; y = atoi(buffer2); printf("y = %d\n",y); } return 0; }
Pour plus de détails cherche dans google :man sprintf man strlen man strncpy man atoi
Bonne chance-
merci pour le bout de code ca compile et ca marche.
mais jaimerai comprendre quelque chose
si je donne la valeur x 120309, alors ca affiche y =3;
pour la valeur 121007 ca affiche bien y=10;
pourquoi le 0 nest pa considere dans le premier cas?
et si je voulais absolument le recuper? ie 03?
peut etre que ma preocupation est bete?
merci encore
-
-
Parce que le atoi converti la chaîne "03" en une valeur numérique (donc 3). Si tu veux vraiment la sous chaîne elle est dans buffer2 et là, le 0 apparaîtra (mais contrairement à y ce sera une chaîne et pas une valeur numérique) et dans ce cas là les deux dernières instructions (atoi, printf) de la boucle ne servent pas, il suffit de faire :
printf("%s\n",buffer2);
Autre possibilité, tu gardes le code actuel et tu fais un :printf("%02d\n",y);
(où truc dans le genre). Pour plus de détails :man printf
(dans google ou dans une console linux)
Bonne chance -
De rien et bonne continuation