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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Aucun résumé des modifications
Ligne 3 : Ligne 3 :
Écrire une fonction C calculant la longueur en octets d'une chaîne de caractères, donnée en argument.
Écrire une fonction C calculant la longueur en octets d'une chaîne de caractères, donnée en argument.


A titre d'exercice, pas utiliser la fonction strlen() du fichier d'include [[w:en:string.h|string.h]].
À titre d'exercice, pas utiliser la fonction <code>strlen()</code> du fichier d'entête [[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 30 : Ligne 30 :
Ici, on a choisi de retourner la valeur -1 si le pointeur est nul.
Ici, on a choisi de retourner la valeur -1 si le pointeur est nul.


La boucle de recherche de l'élément nul peut être aussi écrite avec un <code>for</code>:
La boucle de recherche de l'élément nul peut être aussi écrite avec un <code>for</code> :
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
#include <stdlib.h>
#include <stdlib.h>
Ligne 52 : Ligne 52 :
/*
/*
Nom ....... : lg.c
Nom ....... : lg.c
Role ...... : Compte le nombre de caractères d'une chaine constante
Role ...... : Compte le nombre de caractères d'une chaîne constante
Compilation : gcc -Wall -o lg.exe lg.c
Compilation : gcc -Wall -o lg.exe lg.c
Exécution . : ./lg.exe
Exécution . : ./lg.exe
Ligne 77 : Ligne 77 :
int nb=0;
int nb=0;
char *C;
char *C;
C = "Chaine de caracteres constante";
C = "Chaîne de caractères constante";


nb = longueur(C);
nb = longueur(C);


(void)printf("Le nombre de caracteres est de : %d\n", nb);
(void)printf("Le nombre de caractères est de : %d\n", nb);
return EXIT_SUCCESS;
return EXIT_SUCCESS;
}
}
Ligne 97 : Ligne 97 :
== Longueur d'une chaîne de caractères (par une fonction) ==
== Longueur d'une chaîne de caractères (par une fonction) ==
Écrire un programme ''lgChaine.c'' :
Écrire un programme ''lgChaine.c'' :
* qui lit des chaines de caractères tapées au clavier (flux stdin);
* qui lit des chaînes 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 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).
* 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).


Ligne 110 : Ligne 110 :
Nom ...... : lgChaine.c
Nom ...... : lgChaine.c
Auteur ... : Thierry46
Auteur ... : Thierry46
Role ..... : Lit des chaines et affiche leur longueur.
Rôle ..... : Lit des chaînes et affiche leur longueur.
Paramètres : non pris en compte.
Paramètres : non pris en compte.
Code retour : 0 (EXIT_SUCCESS)
Code retour : 0 (EXIT_SUCCESS)
Pour produire un executable avec le compilateur libre GCC :
Pour produire un exécutable avec le compilateur libre GCC :
gcc -Wall -std=c99 -o lgChaine.exe lgChaine.c
gcc -Wall -std=c99 -o lgChaine.exe lgChaine.c
Pour exécuter, tapez : ./lgChaine.exe
Pour exécuter, tapez : ./lgChaine.exe
Ligne 133 : Ligne 133 :
char *chRetour;
char *chRetour;
(void)puts("Entrez du texte puis la touche Entree,\n"
(void)puts("Entrez du texte puis la touche Entrée,\n"
"ou appuyez seulement sur la touche Entree pour arreter");
"ou appuyez seulement sur la touche Entrée pour arrêter");
do
do
{
{
// Lecture de la chaine au clavier \n inclu
// Lecture de la chaîne au clavier \n inclu
chRetour = fgets(reponse, _POSIX_MAX_INPUT, stdin);
chRetour = fgets(reponse, _POSIX_MAX_INPUT, stdin);
if (chRetour != NULL)
if (chRetour != NULL)
{
{
// Suppression du \n final eventuel
// Suppression du \n final éventuel
posCr = strrchr(reponse, '\n');
posCr = strrchr(reponse, '\n');
if (posCr != NULL)
if (posCr != NULL)
Ligne 149 : Ligne 149 :
}
}
// Calcule la longueur de la chaine
// Calcule la longueur de la chaîne
lgReponse = strlen(reponse);
lgReponse = strlen(reponse);
if (lgReponse != 0)
if (lgReponse != 0)
{
{
(void)printf("Vous avez entre la chaine :\n"
(void)printf("Vous avez entre la chaîne :\n"
"\t-\"%s\"\n"
"\t-\"%s\"\n"
"\t- %zu caractere%s\n",
"\t- %zu caractère%s\n",
reponse, lgReponse,
reponse, lgReponse,
(lgReponse>1) ? "s" : "");
(lgReponse>1) ? "s" : "");
Ligne 163 : Ligne 163 :
else if (ferror(stdin))
else if (ferror(stdin))
{
{
(void)fputs("Probleme de lecture.\n", stderr);
(void)fputs("Problème de lecture.\n", stderr);
codeRetour = EXIT_FAILURE;
codeRetour = EXIT_FAILURE;
}
}

Version du 15 avril 2022 à 16:17

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

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

À titre d'exercice, pas utiliser la fonction strlen() du fichier d'entête string.h.

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

Écrire un programme lgChaine.c :

  • qui lit des chaînes 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.