Le langage C

Fermé
lamia23 Messages postés 1 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 24 mars 2007 - 24 mars 2007 à 14:57
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 mars 2007 à 16:23
svp je veux avoir la fonction qui remplace un mot donné par un autre mot dans une chaine de caractères qui contient des mots séparés par des blancs sans utiliser les fonctions prédéfinies( le programme doit etre en langage C)
merci bcp
A voir également:

3 réponses

chercher dans les exercice corriger

de C++
0
bon l'idée c'est que tu fait un indice courant qui compare chaque fois la premiére lettre de ton mot avec les lettre de ta chaine. est si tu trouvera cette lettre tu fait un autre indice qui rassure que toute la suite est la meme. voila je suis un peut occupé si ta pas compri contacte moi a ma boite.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 mars 2007 à 16:23
Salut,

voilà un petit exemple (il n'y a pas de fonctions prédefini) en utilisant juste de boucles simples.
c'est juste une exemple, à toi d'apporter des modifications
/* -------------------------------------------------- *\
   sam 24 mars 2007 remplacer_mot.c
Sujet:remplacer un mot dans une chaine

     si la chaine existe
       tant que le mot à remplacer existe dans la chaine
         le remplacer
        afficher la nouvelle chaine
\* -------------------------------------------------- */
#include <stdio.h>

#define MAXMOT 20
#define MAXLIGNE 1000

int liremot      (char mot1[]  , int taille);
int lireligne    (char chaine[], int taille);
int cherchemot   (char chaine[], char mot1[]);
void remplacemot (char chaine[], char mot1[], char mot2[]);
int l1, l2;

int main ()
{
  char mot1[MAXMOT];
  char mot2[MAXMOT];
  char chaine[MAXLIGNE];

  printf ("Entrez le mot à remplacer : ");
  l1 = liremot (mot1, MAXMOT);

  printf ("Entrez le mot remplaçant : ");
  l2 = liremot (mot2, MAXMOT);

  if (lireligne (chaine, MAXLIGNE) > 0)
    {
      while (cherchemot (chaine, mot1) >= 0)
        remplacemot (chaine, mot1, mot2);
      printf ("%s", chaine);
    }
  return 0;
}

/* lire les mots (celui qu'on veut remplacer
 * et celui avec lequel on remplace         */
int liremot (char mot1[], int taille)
{
  int i,c;

  for (i = 0; i < taille - 1 && (c = getchar ()) != EOF && c != '\n'; ++i)
    mot1[i] = c;
  if (c == '\n')
    mot1[i] = '\0';
  return i;
}

/* lire la ligne dans laquelle on
 * remplace le mot chercher      */
int lireligne (char chaine[], int taille)
{
  int i, c;
  printf ("Entrez une chaine de caractères : ");

  for (i = 0; i < taille - 2 && (c = getchar ()) != EOF && c != '\n'; ++i)
    chaine[i] = c;
  if (c == '\n')
    chaine[i++] = '\n';
  chaine[i] = '\0';
  return i;
}

/* cherche le mot à remplacer dans la chaine
 * retourne la position                      */
int cherchemot (char chaine[], char mot1[])
{
  int i, j, k;
  for (i = 0; chaine[i] != '\0'; ++i)
    {
      for (j = i, k = 0; mot1[k] != '\0' && chaine[j] == mot1[k]; ++j, ++k)
        ;
      if (k > 0 && mot1[k] == '\0')
        return i;
    }
  return -1;
}

/* remplacer le mot ou les mots */
void remplacemot (char chaine[], char mot1[], char mot2[])
{
  int dec, pos;
  int i, j;
  char temp[MAXLIGNE];

  pos = cherchemot (chaine, mot1);
  dec = l1 - l2;
  if (dec > 0)
    {
      for (i = pos, j = 0; i < pos + dec + 1 && mot2[j] != '\0'; ++i, ++j)
        chaine[i] = mot2[j];
      for (j = pos; (chaine[i] = chaine[j + l1]) != '\0'; ++j, ++i)
        ;
      chaine[i] = '\0';
    }
  else
    {
      for (i = pos + l1, j = 0; (temp[j] = chaine[i]) != '\0'; ++i, ++j)
        ;
      for (i = pos, j = 0; i < pos + l2 && mot2[j] != '\0'; ++i, ++j)
        chaine[i] = mot2[j];
      chaine[i] = '\0';
      for (j = 0; (chaine[i] = temp[j]) != '\0'; ++i, ++j)
        ;
      chaine[i] = '\0';
    }
}
/* __END__ */
0