Gestion de chaines de char en C

Bonjour,

je voudrai realiser un prg en C qui lit une ligne de texte, et affiche ensuite:
-la longueur de la chaîne
-le nombre de "e" contenus dans la chaîne
-la chaine saisie à rebours sans changer le contenu de la variable qui contient la chaîne
-la chaine à rebours apres avoir inversé l'ordre des caractères dans la variable qui contient la chaîne.

J'ai des difficultés à réaliser les 2 dernieres questions; quelqu'un pourrait il m'aider?

Mon code:

[code]

#include <stdio.h>

main ()
{
char txt[200], chaine_inv[200];
int i = 0, j = 0, nbre_e = 0;

clrscr();

printf("Veuillez entrer une chaine: ");
gets(txt);
printf("\n\nLa longueur de la chaine entree est: %d", strlen(txt));

for (i = 0; i <= strlen(txt); i = i + 1)
{
if (txt[i] == 'e')
nbre_e = nbre_e + 1;
}

printf ("\n\nLe nombre de caracteres e contenus dans cette chaine est: %d", nbre_e);

for (i = strlen (txt); i >= 0; i = i - 1)
{

puts(txt[i]);
}

getch();
}

[/code]

Merci

4 réponses

  1. Slt tonguim,

    -la chaine saisie à rebours sans changer le contenu de la variable qui contient la chaîne 

    La boucle 'for' que tu as mis est _presque_ bonne :

     for (i = strlen (txt) - 1 ; i >= 0; i = i - 1)
    {
    puts(txt[i]);
    } 
    

    car la fonction strlen renvoie (si mes souvenir sont bons) la taille de la chaîne, et non pas l'indice du dernier caractère (qui est taille - 1).

    -la chaine à rebours apres avoir inversé l'ordre des caractères dans la variable qui contient la chaîne

    presque le même code pour cette question (presque la même question ...)
    int taille = strlen (txt) - 1;
    ...
     for (i = taille ; i >= 0; i = i - 1)
    {
    chaine_inv[taille - i] = txt[i];
    } 
    chaine_inv[taille+1] = '\0'  // marqueur de fin de chaîne
    puts (chaine_inv);
    
    0
    1. Merci; j'ai essaye, mais le programme se comporte toujours de la meme maniere
      0
      1. Contributeur
        Salut,

        Compilé et testé ca marche voici le code:

        #include <stdio.h> 
        #include <string.h>
        
        void main () 
        { 
        	char txt[200]; 
        	char chaine_inv[200]=""; 
        	int i = 0, j = 0, nbre_e = 0; 
        	int taille=0;
         
        
        	printf("Veuillez entrer une chaine: "); 
        	gets(txt); 
        	printf("\n\nLa longueur de la chaine entree est: %d", strlen(txt)); 
        
        	taille=strlen(txt)-1;
        
        	for (i=0;i<=taille; i++) 
        	{ 
        		if (txt[i] == 'e') nbre_e = nbre_e + 1; 
        	} 
        
        	printf ("\n\nLe nombre de caracteres e contenus dans cette chaine est: %d\n", nbre_e); 
        
        	for (i = taille ; i >= 0; i = i - 1)
        	{
        		chaine_inv[taille - i] = txt[i];
        	} 
        	chaine_inv[taille+1] = '\0';  
        	puts (chaine_inv);
        
        }
        
        
        0
        1. Cette fois, le programme produit les resultats attendus.
          Merci a tous

          J'ai un autre programme sur lequel je reflechis depuis ...en vain. Mais il faut que je cherche encore.
          0