Chaine de caractére en c

Fermé
avneger10 Messages postés 9 Date d'inscription mercredi 1 mai 2013 Statut Membre Dernière intervention 22 janvier 2014 - 1 mai 2013 à 19:19
 avneger10 - 3 mai 2013 à 20:45
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);
}
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
1 mai 2013 à 20:07
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
avneger10 Messages postés 9 Date d'inscription mercredi 1 mai 2013 Statut Membre Dernière intervention 22 janvier 2014
1 mai 2013 à 22:01
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
Modifié par fiddy le 1/05/2013 à 22:43
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
merci beaucoup fiddy =)
0
et désolé pour le retard =)
0