Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de chaine de carac

tjrs ds un for

    22 octobre 2006 à 16:36:11

    Salut, je fais un prog, qui doit me donner le mot le plus long présent dans la chaine de carac.
    Vous devez d'abord rentrer la taille de votre chaine, puis la chaine.
    G plusieurs problèmes, tout d'abord, mon code ne fonctionne pas tout le temps, ensuite, il prend trop de mémoire, et prend parfois trop de temps à executer.
    Si vous savez comment l'optimiser et le corriger, je vous écoute :p


    #include <stdio.h>

    int MotLePlusLong(char* chaine, int taille)
    {
        int j = 0;
        char carac;
        int longueur = 0;
        char maillon[100];
        int i = 0;
        for ( i = 0; i < taille;)
        {
            for (j = 0; carac != ' '; j++)
            {
                carac = chaine[i+j];
                if ( carac != ' ')
                {
                maillon[j] = chaine[i + j];
                }
            }
            if ( strlen(maillon) > longueur)
            {
            longueur =  strlen(maillon);
            }
            carac = 'f';
            j = j + 2;
            i =  i + j;
        }
        return longueur;
    }

    int main()
    {
       int taille;
       char chaine[201];
       int longueur;
       int i;
       scanf("%d", &taille);
       do {
          scanf("%c", &(chaine[0]));
       } while ((chaine[0] == '\n') || (chaine[0] == '\r'));
       for (i = 1; i < taille; i++)
          scanf("%c", &(chaine[i]));
       chaine[i] = 0;
       longueur = MotLePlusLong(chaine, taille);
       printf("%d\n", longueur);
       return 0;
    }




    @+ :soleil:
    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2006 à 19:56:20

      Salut,

      Je comprends pas bien ta partie "saisie de chaine". Mais bon, voici une façon de le faire, il y'en a surement d'autres (notamment avec une saisie encore plus securisée...)

      Ah, pis faut pas oublier l'include de string.h, hein ? :D

      #include <stdio.h>
      #include <string.h>

      // Fonctions purger, clean et principe de saisie par KrOOpS
      // http://www.siteduzero.com/tuto-3-11181-1-c-realiser-des-saisies-securisees-grace-a-fgets.html

      void purger(void)
      {
          int c;
          while ((c = getchar()) != '\n' && c != EOF)
          {}
      }

      void clean (char *chaine)
      {
          char *p = strchr(chaine, '\n');

          if (p)
              *p = 0;
          else
              purger();
      }

      int max(int nombre1,int nombre2)
      {
          return (nombre1>nombre2)?nombre1:nombre2;
      }

      int motLePlusLong(char* texte)
      {
          int i=0,maxcar=0,compte=0;
          printf("\n"); // pour verif
          while(*(texte+i)!='\0')
          {
              if(texte[i]==' ')
              {
                  printf("\t%d caracteres\n",compte); // pour verif
                  maxcar=max(maxcar,compte);
                  compte=0;

              }
              else
              {
                  compte++;
                  putchar(texte[i]); // pour verif
              }

              i++;
          }
          printf("\t%d caracteres\n",compte); // pour verif
          maxcar=max(maxcar,compte);

          return maxcar;
      }

      int main (void)
      {
          char chaine[200];

          printf("Veuillez taper une phrase : ");
          fgets(chaine, sizeof chaine, stdin);
          clean(chaine);
          printf("\nVous avez tape : '%s'\n", chaine);
          printf("Cette chaine a une longueur de %d caracteres.\n",strlen(chaine));
          printf("\nLe mot le plus long fait %d caracteres",motLePlusLong(chaine));

         return 0;
      }
      • Partager sur Facebook
      • Partager sur Twitter

      probleme de chaine de carac

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown