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++)
{

A voir également:

14 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
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;
}
3
Rejoignez-nous