« Exercices en langage C/Chaines » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Thierry46 (discussion | contributions)
Thierry46 (discussion | contributions)
Ajout exercice longueur de chaîne avec strlen
Ligne 1 : Ligne 1 :
{{Exercices en langage C}}
{{Exercices en langage C}}
== Les chaînes de caractères ==
== Longueur d'une chaîne de caractères (pour manipuler) ==

== Longueur d'une chaîne de caractère ==
Écrire une fonction C calculant la longueur d'une chaîne de caractères, donnée en argument.
Écrire une fonction C calculant la longueur d'une chaîne de caractères, donnée en argument.


Ne pas utiliser la fonction strlen() du fichier d'include [[w:en:string.h|string.h]].
A titre d'exercice, pas utiliser la fonction strlen() du fichier d'include [[w:en:string.h|string.h]].


<div style="width:70%; float:left">{{Boîte déroulante|titre=Solution|contenu =
<div style="width:70%; float:left">{{Boîte déroulante|titre=Solution|contenu =
Ligne 93 : Ligne 91 :
Le nombre de caracteres est de : 30
Le nombre de caracteres est de : 30
</pre>
</pre>

}} </div>
}} </div>

== Longueur d'une chaîne de caractères (par une fonction) ==
Écrire un programme ''lgChaine.c'' :
* qui lit des chaines de caractères tapées au clavier (flux stdin);
* qui calcule la longueur de chaque chaîne entrée et l'affiche ainsi que sa longueur;
* qui s'arrête si l'utilisateur ne frappe que la touche Entrée ou si le fichier est fini (Ctrl-D tapé par l'utilisateur).

Vous utiliserez :
* une des fonctions déclarée dans [[w:en:stdio.h|stdio.h]].
* la fonction <code>strlen</code>, ainsi que d'autres si nécessaire, déclarée dans [[w:en:string.h|string.h]].

<div style="width:70%; float:left">{{Boîte déroulante|titre=Solution|contenu =
<source lang="c">
/*
Nom ...... : lgChaine.c
Auteur ... : Thierry46
Role ..... : Lit des chaines et affiche leur longueur.
Paramètres : non pris en compte.
Code retour : 0 (EXIT_SUCCESS)
Pour produire un executable avec le compilateur libre GCC :
gcc -Wall -std=c99 -o lgChaine.exe lgChaine.c
Pour exécuter, tapez : ./lgChaine.exe
Version : 1.0 du 14/1/2008
Licence : GNU GPL
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
int main(void)
{
char reponse[_POSIX_MAX_INPUT];
int lgReponse = 0;
int codeRetour = EXIT_SUCCESS;
char *posCr;
char *chRetour;

(void)puts("Entrez du texte puis la touche Entree,\n"
"ou appuyez seulement sur la touche Entree pour arreter");

do
{
// Lecture de la chaine au clavier \n inclu
chRetour = fgets(reponse, _POSIX_MAX_INPUT, stdin);
if (chRetour != NULL)
{
// Suppression du \n final eventuel
posCr = strrchr(reponse, '\n');
if (posCr != NULL)
{
*posCr = '\0';
}

// Calcule la longueur de la chaine
lgReponse = (int)strlen(reponse);
if (lgReponse > 0)
{
(void)printf("Vous avez entre la chaine :\n"
"\t-\"%s\"\n"
"\t- %d caractere%s\n",
reponse, lgReponse,
(lgReponse>1) ? "s" : "");
}
}
else if (ferror(stdin))
{
(void)fputs("Probleme de lecture.\n", stderr);
codeRetour = EXIT_FAILURE;
}
} while ((chRetour != NULL) && (lgReponse > 0));

return codeRetour;
} // int main(...
</source>

'''Remarques''' :
* L'utilisation de <code>fgets</code> est plus sûre que <code>gets</code> ou <code>scanf</code> : fgets permet de limiter le nombre de caractère lu et de ne pas déborder de la variable ''reponse''. Les débordements mémoire sont une source d'erreur fréquente en C.
* Ce programme peut ne pas donner les résultats attendus si on redirige sur l'entrée standard un fichier comportant des terminateurs de ligne \r (Mac).
}} </div>


[[Catégorie:Exercices en langage C (livre)]]
[[Catégorie:Exercices en langage C (livre)]]

Version du 15 janvier 2008 à 22:31

Longueur d'une chaîne de caractères (pour manipuler)

Écrire une fonction C calculant la longueur d'une chaîne de caractères, donnée en argument.

A titre d'exercice, pas utiliser la fonction strlen() du fichier d'include string.h.

Longueur d'une chaîne de caractères (par une fonction)

Écrire un programme lgChaine.c :

  • qui lit des chaines de caractères tapées au clavier (flux stdin);
  • qui calcule la longueur de chaque chaîne entrée et l'affiche ainsi que sa longueur;
  • qui s'arrête si l'utilisateur ne frappe que la touche Entrée ou si le fichier est fini (Ctrl-D tapé par l'utilisateur).

Vous utiliserez :

  • une des fonctions déclarée dans stdio.h.
  • la fonction strlen, ainsi que d'autres si nécessaire, déclarée dans string.h.