Gestion de chaines de char en C

tonguim -  
 tonguim -
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. bucheron Messages postés 62 Statut Membre 2
     
    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
  2. tonguim
     
    Merci; j'ai essaye, mais le programme se comporte toujours de la meme maniere
    0
  3. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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
  4. tonguim
     
    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