String

cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008 - 23 mai 2004 à 00:15
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 23 mai 2004 à 18:22
Bonjour

Comme le dit le sujet j'ai un probleme de string ...... ;-)

en fait j'ai un char remplit d'une chaine de caractere avec a un endroit de la chaine des chiffre et je voudrai arriver a mettre ces chiffre dans un int.

par exemple

char a[]="aaaaaa123aaaaaaaa";

comment je fait pour choper les chiffre 123 ???

Merci

Thomas

19 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2004 à 00:20
int i = 0;
char *c = a;

while(*c) {
if((*c >= 48) && (*c <= 57)) {
i = atoi(c); break;
}
c++;
}

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mai 2004 à 00:22
Yep,
Le solution que je te propose c'est de parcourir ta chaine de carateres et de comparer le code ASCII de chacun d'entre eux ...
Si le code ASCII est compris entre 48 et 57, il s'agit d'un chiffre...
Tu stocke ainsi tout tes chiffres dans un tableau de char temporaire que tu convertia ensuite en int a l'aide de la fonction atoi.

Si t'as besoin d'un code précis ya pas de prob....

A++ et bonne continuation....

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 00:23
si il y a plusieurs chiffre 'est sur que sa marche ???
car d'apres ce que je voit tu prend les chiffre un a un et tu les rentre dans i mais a chaque fois tu écrase l'ancienne valeur de i pour en mettre une nouvelle.
Pourait tu expliquer un tout petit peut ta manipulation ?

merci

Thomas
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 00:26
je vuet bien un exemple précis pour bien saisir DeAtHCrAsH

Merci

Thomas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mai 2004 à 00:29
Brunews ta solution ecrase les valeurs précédente ...
Voila comment faire... T'as juste a déclarer un tableau d'entier...
Voici la solution de BruNews remixé :

int Tab[50];
int cpt = 0;
char *c = a;

while(*c) {
if((*c >= 48) && (*c <= 57)) {
Tab[cpt] = atoi(c);
cpt++;
}
c++;
}

A++ et bonne continuation....

Samir
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2004 à 00:29
atoi n'est execute qu'une SEULE FOIS, vois le break qui suit.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mai 2004 à 00:32
Voici un exemple complet:

#include <stdio.h>

int main()
{
int Tab[50];
int cpt = 0;
char *c = "aaaaaa123bbbbb456ccccc789";

while(*c) 
{
if((*c >= 48) && (*c <= 57)) 
{
Tab[cpt] = atoi(c);
cpt++;
}
c++;
}
return 0;
}


A++ et bonne continuation....

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 00:33
Merci a vous deux mais en fait avec le break j'ai compri la methode de brunews et je pense que c'est la mieu car si il y a des chiffre a un autre endroit sa foutra la pagaille.

Encore merci

++ Thomas
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mai 2004 à 00:38
BruNews> Je me suis mal exprimé .. Ta solution n'ecrase pas les valeurs précédentes, mais si la chaine est aaa123bbb456, dans ton code i vaudra 123 a la place 123456 ....

Puis je suppose que ToToL veut récuperer les chiffres indépendament puisqu'il demande comment choper les chiffres 123 ....

A++ et bonne continuation....

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 01:12
avec la technique que vous mavez dit j'ai essayer de passer par socket une chaine de caractere former de ctte maniere

char a[5];
char *i;
int z = 99;

strcpy(a,"a");
itoa(a,z,2);
strcat(a,i);

logiquement a ce moment la j'ai la chaine "a99" dans la variable a non ?? c'est sa ou il faut faire d'une autre maniere ?

le probleme est qu'aparament non ou alors c'est mon programme qui recoit qui est mal fichu.

Merc

Thomas
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2004 à 01:16
itoa(a,i,2); ????
i est un pointeur ne pointant nulle part a ce moment du crime.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 01:18
Excuser moi je n'est pas mis de quel facon je recevai et analysai le socket :

j'ai créé cette fonction ( celle que vs m'avez dit )

int integer ( char * c )
{
while(*c)
{if((*c >= 48) && (*c <= 57)) {return atoi(c);}c++;}
return 0;
}

et pour recevoir mon socket je fait

int azerty
char buffer_r[300];
recv(m_sock,buffer_r,300,0)if ( buffer_r 'a' ) { azerty integer(&buffer_r[0];}

Merci

Thomas
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 01:21
Encore un exuse ..... il se fait tar je commence a m'embrouiller....

pour la premiere partit du code la voila :

char a[5];
char *i;
int z = 99;

strcpy(a,"a");
itoa(z,i,2);
strcat(a,i);

Merci

Thomas
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mai 2004 à 01:21
itoa prend en 1er parametres un entier et non pas un charactere!
Logique que ca marche pas !

Voila plus simple a faire:

#include <stdio.h>

int main()
{
char a[5];
int z = 99;

sprintf(a,"%s%i","a",z);

printf("%s\n",a);

return 0;
}


A++ et bonne continuation....

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 01:22
Encore un exuse ..... il se fait tar je commence a m'embrouiller....

pour la premiere partit du code la voila :

char a[5];
char i[3];
int z = 99;

strcpy(a,"a");
itoa(z,i,2);
strcat(a,i);

Merci

Thomas
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mai 2004 à 01:25
Si tu envoie a99, tu ne peux pas faire if ( buffer_r == 'a' ) !!!

Tu dois mettre if ( buffer_r [0] == 'a' ) pour ne prendre que le 1er element car buffer_r vaudra "a99" !!!!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2004 à 01:29
On resume:
char a[8]; // multi de 4 !!!
int z = 99;
a[0] = 'a'; // mieux que strcpy pour 1 octet
itoa(z, a+1, 2); // supprime strcat

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
23 mai 2004 à 01:30
excuser moi encore car dans mon code il y est et j'ai oublier de le mettre.

Merci DeAtHCrAsH pour sprintf je l'avai zapper cette fonction. sa a l'aire de marcher a peut pres. si j'ai d'autre probleme je reposterai ;-)

Encore merci

Thomas
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
23 mai 2004 à 18:22
Petite remarque pour améliorer la lisibilité du code, remplacer

if((*c >= 48) && (*c <= 57))


par

if (isdigit(*c))


Kaid - kaid.fr.st
0
Rejoignez-nous