Extraire entier d'une chaine

Résolu
cs_Vylco
Messages postés
14
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 novembre 2009
- 10 nov. 2009 à 18:00
cs_Vylco
Messages postés
14
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 novembre 2009
- 13 nov. 2009 à 17:52
Bonjour, voila j'ai un exo a faire en algo mais je vois pas comment le faire.

la consigne: soit une chaine de caractère. Ecrivez une fonction qui recoit cette chaine et qui extrait toutes les valeures numeriques comprises entre 10 et 30 pour les mettre dans un tableau.
exemple: Ch=<<fsdfs18seryrtr21htrr13rgerger1225rte17htyyt29jy>>
le tableau contiendra : 18,21,13,29

j'ai commencé le début mais je vois pas quelle fonction utilisé et comment savoir une valeure de la chaine des numériques ou non, bref chui perdu , quelqu'un a une idée ? thank you bien d'avance.

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

void main()
{
char ch[200];
printf("saisir une chaine alphanumerique\n");
scanf("%s",&ch);
}

char Extraire_Num(char une_chaine)
{
int i;
int tab[];

for(i=0;i<strlen(une_chaine);i++)
{

14 réponses

cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
12 nov. 2009 à 23:59
Tu n'étais franchement pas loin. Il ne fallait pas de boucle autour de strncpy, puisqu'il copiait déjà tout.
Il te manque quelques truc à reinitialiser, comme chtemp.
On utiliser memset pour affecter une même valeurs à des cases données, et non chtemp = "";

Ca devrait donner ceci (le code n'est pas super propre, il est juste là pour te corriger ton travail actuel, et peut être amélioré):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/*
** Lira tout jusqu'à atteindre un 0.
** Attention, s'il n'y a pas de 0, il peut y avoir débordement !
*/
void display_tab(int* tab)
{
  while (tab && *tab)
  {
    printf("%i ", *tab);
    ++tab;
  }
  printf("\n");
}

void Extraire_Num(char *une_chaine)
{
  int i = 0;
  int mdeb = 0;
  int mfin = 0;
  int j = 0;
  int tab[256] = {0};
  char chtemp[256] = {0};
  int size = strlen(une_chaine);
  int tmp = 0;

  for (i = 0; i < size; ++i)
  {
    if (isdigit(une_chaine[i]))
    {
      mdeb = i;
      i++;
      printf("indice de debut %d \n",i);
      while (mdeb < size && isdigit(une_chaine[i]))
      {
mfin = i;
i++;
      }
      printf("indice de fin %d\n",i);

      memset(chtemp, 0, 256); /* On met 0 dans toutes les 256 cases */
      strncpy(chtemp, une_chaine + mdeb, mfin - mdeb + 1);
      printf("%s\n", chtemp);

      tmp = atoi(chtemp);
      if (tmp > 10 && tmp < 30)
      {
tab[j] = tmp;
j++;
      }

    }
  }
  display_tab(tab);
}

int main(void)
{
  char ch[256] = "fsdfs18seryrtr21htrr13rgerger1225rte17htyyt29jy";
/*   printf("saisir une chaine alphanumerique\n"); */
/*   scanf("%s",ch); */

  Extraire_Num(ch);

  return 0;
}
2