Rechercher : dans
Par :

[C ANSI]Fonction pour Parser une chaine?

Dernière réponse le 14 nov 2005 à 14:56:12 Noémie, le 14 nov 2005 à 12:43:12 
 Signaler ce message aux modérateurs

OS: WIN XP & UBUNTU BREEZY

Bonjour,
je voudrais savoir s'il existe en C Ansi une fonction pour parser une ligne contenant des mots séparés par des espaces par exemple:

char chaine[]="France 12.2 14.3 paris"



Je recherche en priorité une telle fonction sous Unix mais si elle existe ausi sous windows ce serait l'idéal.

Je voudrais récupérer en fait chacun des mots dans un tableau une structure quelconque.
J'imagine qu'il doit déjà exister de telles fonctions d'où ma question.

Merci d'avance!

Noémie.

Meilleures réponses pour « [C ANSI]Fonction pour Parser une chaine? » dans :
VBScript - Les fonctions de chaînes de caractères Voir Les fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

kilian, le 14 nov 2005 à 13:09:45

Salut,

Je connais pas de fonction qui fait ça.
Par contre, tu peux te débrouiller avec une petite astuce, c'est de transformer les espaces en caractères de fin de chaîne : '\0' et de faire pointer chaque début de chaine sur des pointeurs.

Le mieux serait d'utiliser une liste chainée. Mais en attendant tu peux probablement de contenter de déclarer un tableau de pointeurs statique.

En bref ta fonction devrait ressembler à ça:

void split_space (char *chaine, char *tab[100])
{
      unsigned int i;
      len=strlen(chaine);
      j=0;
      for (i=0;i<len;i++)
      {
             if (chaine[i] == ' '){
                        chaine[i] = '\0'; //Remplace espace par fin de chaine
                        while (chaine[i+1] == ' ')
                        {
                                  i++; // Tant qu'il y a des espaces on avance.
                        }
                        if (chaine[i+1] == '\0'){
                                  tab[j] = NULL;
                                  return;
                        }
                        else{
                                  tab[j] = &chaine[i];
                                  j++;
                        }
                        if (j==100){
                                 return;
                        }
               }
        }
}

A utiliser comme ceci:
char *chaine="machin bidule chouette";
char *tab[100];

split_space(chaine, tab);

J'ai pas testé mais ça doit pas être loin de ça.

Tu est limitée à 100 espaces. Avec une liste chaine, la memoire et la seule limite.

Répondre à kilian

2

 mamiemando, le 14 nov 2005 à 14:56:12

man strstr


Bonne chance

Répondre à mamiemando