Gestion de chaines de char en C

Fermé
tonguim - 13 juin 2004 à 20:23
 Utilisateur anonyme - 14 juin 2004 à 18:55
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

bucheron Messages postés 62 Date d'inscription samedi 20 mars 2004 Statut Membre Dernière intervention 10 décembre 2004 2
13 juin 2004 à 21:43
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
Merci; j'ai essaye, mais le programme se comporte toujours de la meme maniere
0
Canard007 Messages postés 5929 Date d'inscription mercredi 26 mai 2004 Statut Contributeur Dernière intervention 18 septembre 2009 215
14 juin 2004 à 15:30
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
Utilisateur anonyme
14 juin 2004 à 18:55
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