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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Greudin (discussion | contributions)
Ligne 6 : Ligne 6 :


<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 =
La fonction doit recevoir une chaîne de caractères. Une chaîne de caractères en C est un tableau de caractères, finissant par le caractère nul. La fonction doit donc recevoir un pointeur vers le premier élément du tableau, de type <tt>char *</tt>, et chercher l'élément nul.
La fonction doit recevoir une chaîne de caractères. Une chaîne de caractères en C est un tableau de caractères, finissant par le caractère nul. La fonction doit donc recevoir un pointeur vers le premier élément du tableau, de type <tt>const char *</tt>, et chercher l'élément nul.


La fonction recevant un pointeur, il faut donc s'assurer qu'il est valide. On doit donc tester si le pointeur est nul ou non avant de regarder ce qui se trouve dans le tableau de caractères.
La fonction recevant un pointeur, il faut donc s'assurer qu'il est valide. On doit donc tester si le pointeur est nul ou non avant de regarder ce qui se trouve dans le tableau de caractères.
Ligne 13 : Ligne 13 :
#include <stdlib.h>
#include <stdlib.h>


int longueur(char *s)
size_t longueur(const char *s)
{
{
int n = -1;
const char *p = s;
if (s != NULL)
if (p) {
{
while (*p) {
n = 0;
++p;
while (s[n] != '\0')
{
n++;
}
}
}
}
return n;
return p - s;
}
}
</source>
</source>


Ici, on a choisi de retourner la valeur -1 si le pointeur est nul.
Ici, on a choisi de retourner la valeur 0 si le pointeur est nul.


La boucle de recherche de l'élément nul peut être aussi écrite avec un <tt>for</tt>:
La boucle de recherche de l'élément nul peut être aussi écrite avec un <tt>for</tt>:
Ligne 34 : Ligne 31 :
#include <stdlib.h>
#include <stdlib.h>


int longueur(char *s)
size_t longueur(const char *s)
{
{
int n = -1;
const char *p = s;
if (s != NULL)
if (p) {
for (; *p; ++p) {}
{
for (n = 0; s[n] != '\0'; n++)
{
/* vide */
}
}
}
return n;
return p - s;
}
}
</source>
</source>
Ligne 52 : Ligne 45 :
#include <stdio.h>
#include <stdio.h>


int longueur(char *s)
size_t longueur(const char *s)
{
{
const char *p = s;
int n = -1;
if (s != NULL)
if (p) {
{
for (; *p; ++p) {}
n = 0;
}
return p - s;
while (s[n] != '\0')
{
n++;
}
}
return n;
}
}


int main(void)
int main(void)
{
{
const char *C = "Chaine de caracteres constante";
int nb=0;
char *C;
C = "Chaine de caracteres constante";

nb = longueur(C);


printf("Le nombre de caracteres est de : %d\n", nb);
printf("Le nombre de caracteres est de : %u\n", (unsigned)longueur(C));
return 0;
return 0;
}
}
</source>
</source>

Version du 29 août 2007 à 07:09

Les chaînes de caractères

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.