Chaine de caractére en c

avneger10 Messages postés 13 Statut Membre -  
 avneger10 -
Bonjour,
je ne sais pas ou est le probléme lors de l'execution il ne me donne pas les deux chaine a rebours et inversé
#include<stdio.h>
#include<string.h>
void main()
{
char ch[10];
int l,k,i,nb,j;
/*saisie dee la chaine*/
printf("donnez une chaine\n");
gets(ch);
/*longeure de la chaine*/
for (l=0;ch[l]!='\0';l++)
{}
printf("longeuer de la chaine%d\n",l);
/*nombre d'oocurence du caractére e*/
nb=0;
for(i=0;i<=l;i++)
{ if (ch[i]=='e')
{
nb++;
}
i++;
}
printf("%d\n",nb);
/*phrase a rebours sans changer le contenu de la chaine*/
for (j=l;j=0;j--)
{printf("%s",ch[j]);}
/*phrase a rebour inversé avec inversement du contenu*/
for (k=l;k=0;k--)
{
ch[l-k]=ch[k];
}
printf("votre chaine %s et le nombre d'occurence %d\n",ch,nb);
}

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Si tu veux progresser en C, ça serait bien que tu tiennes compte des remarques que l'on fait sur ton code pour éviter qu'on les répète à chaque fois ;-)

    void main()
    N'existe pas en C -> int main(void)

    gets(ch);
    Obsolète. On utilise fgets(). Je te laisse chercher.

    for (l=0;ch[l]!='\0';l++)
    {}

    Tu peux mettre : for(l=0;...); au lieu de mettre {}
    Sinon pour info, tu as la fonction strlen() qui calcule automatiquement. Et si ton but est de recréer la fonction. Alors dans ce cas, enlève string.h ;-).

    or(i=0;i<=l;i++)
    i<l; Il ne faut pas aller jusque l.

    i++;
    Il sert à rien le i++. Ton for s'occupe déjà de l'incrémentation...

    for (j=l;j=0;j--)
    Revois la condition d'exécution : j=0. Et il faut commencer à l-1 puisqu'un tableau commence à l'indice 0.

    {printf("%s",ch[j]);}
    Soit tu affiches ch[j] qui est un caractère, donc on met : "%c". Soit tu affiches la chaîne globale : printf("%s", ch);

    for (k=l;k=0;k--)
    Idem que l'autre boucle for. A revoir.

    Enfin, n'oublie pas de mettre un return 0;

    Et la prochaine fois, merci de poster ton code entre des balises code (bouton "<>" à droite de souligné "S").

    A toi de jouer.
    0
    1. avneger10 Messages postés 13 Statut Membre
       
      salut fiddy, j'ai pas mis l-1 car dans la boucle for j'ai mis (ch[l]!='\0) par conséquent on ne va pas incrémenter le l .
      j'ai amélorer le programme comme vous me l'avez dit mais rien ne se passe
      #include<stdio.h>
      int main()
      {
      char ch[10];
      int l,k,i,nb,j;
      /*saisie dee la chaine*/
      printf("donnez une chaine\n");
      fgets(ch,10,stdin);
      /*longeure de la chaine*/
      for (l=0;ch[l]!='\0';l++);
      
      printf("longeuer de la chaine%d\n",l);
      /*nombre d'oocurence du caractére e*/
      nb=0;
      for(i=0;i<=l;i++)
      { if (ch[i]=='e')
           {
      	 nb++;
           }
         
      }
      printf("%d\n",nb);
      /*phrase a rebours sans changer le contenu de la chaine*/
      for (j=l-1;j=0;j--)
      {printf("%c",ch[j]);}
      /*phrase a rebour inversé avec inversement du contenu*/
      for (k=l;k<=0;k--)
      {
      ch[l-k]=ch[k];
      }
      printf("votre  chaine  %s et le nombre d'occurence  %d\n",ch,nb);
      
      return(0);}
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      salut fiddy, j'ai pas mis l-1 car dans la boucle for j'ai mis (ch[l]!='\0) par conséquent on ne va pas incrémenter le l .
      L'incrémentation finale aura quand même lieu.
      for (l=0;ch[l]!='\0';l++);
      D'ailleurs, il ne faut pas oublier que fgets stocke '\n' dans la chaîne. Donc, il faudrait plutôt mettre : for (l=0;ch[l]!='\0' && ch[l]!='\n';l++);

      Ensuite, tu n'as pas tenu compte de toutes mes remarques.

      for(i=0;i<=l;i++)
      Il ne faut pas aller jusque l...

      for (j=l-1;j=0;j--)
      Condition j=0 à revoir...

      Et je rajoute une remarque :
      for (k=l;k<=0;k--)
      {
      ch[l-k]=ch[k];
      }

      Il faut échanger les contenus. Une simple affectation n'est donc pas suffisante, il en faut trois (échange de contenu de variables). Et attention avec les indices. k=l => Non l-1. Etc.
      0
    3. avneger10
       
      merci beaucoup fiddy =)
      0
    4. avneger10
       
      et désolé pour le retard =)
      0