print · rss · source

< Les tableaux | TutoCFrench | Les pointeurs >


Chaînes de caractères

Notions :

  • tableau
  • \0
  • sizeof
  • fonctions de manipulation de chaînes (strlen, strcpy, strcmp, etc.).

Chaînes de caractères et chaînes littérales

Une chaîne de caractère est tout simplement un tableau de caractères dont le dernier élément est le caractère '\0' appelé aussi NULL :

char ma_chaine[] = {'h', 'e', 'l', 'l', 'o', '\0'};

Nous savons comment affecter un tableau. Pour les chaînes de caractères, il y a une méthode beaucoup plus simple : l'utilisation des chaînes littérales. Une chaîne littérale est une suite de caractères entre guillemets :

char ch[] = "hello"; /* tableau de 6 caracteres (avec '\0') */

Fonctions de manipulation de chaînes

Afficher une chaîne

La fonction printf() et l'indicateur de format %s permettent d'affichent une chaîne passée en argument :

char ch[] = "hello";
printf("%s world !\n", ch);

Saisir une chaîne

La fonction scanf() et l'indicateur de format %s permettent de saisir une chaîne. Nous avons déjà vu scanf(), mais les tableau sont des cas particuliers et il n'est pas besoin de mettre le caractère & devant le nom :

char ch[512];
scanf("%s", ch);  /* Attention : il ne faut pas ecrire &ch ! */

Copier, comparer, mesurer

Une chaîne est un tableau, on ne peut donc réaliser directement une affectation ou une comparaison. Pour copier une chaîne dans un tableau, on utilise la fonction strcpy() :

char src[] = "hello";
char dst[512];
strcpy(dst, src);
printf("%s\n", dst);

La fonction strcmp() permet de comparer deux chaînes.

La fonction strlen() sert à mesurer la longueur d'une chaîne (caractère nul non compris) :

#include <stdio.h>
#include <string.h>

int main()
{
    char msg[] = "hello";
    printf("'%s' fait %d caractères\n", msg, strlen(msg));
    return 0;
}

Exercices

  1. "strlen.c" et "strcpy.c": réimplémenter les fonctions C strlen et strcpy
  2. "reverse.c" : programme qui saisit une chaîne et l'affiche à l'envers

Solutions

strlen.c

#include <stdio.h>

int strlen(char ch[])
{
    int i = 0;
    while (ch[i] != '\0') 
        i++;
    return i;
}

int main()
{
    char ch[512];
    scanf("%s", ch);

    printf("%d\n", strlen(ch));

    return 0;
}

strcpy.c

int strcpy(char dst[], char src[])
{
    int i = 0;
    while ((dst[i] = src[i]) != '\0') 
        i++;
    return i;
}

reverse.c

#include <stdio.h>
#include <string.h>

void reverse(char dst[], char src[])
{
    int i, j;

    j = 0;
    i = strlen(src) - 1;
    while (i>-1) {
        dst[j] = src[i];
        i--;
        j++;
    }
    dst[j] = '\0';
}

int main()
{
    char s[512];
    char d[512];

    scanf("%s", s);
    reverse(d, s);
    printf("%s\n", d);

    return 0;
}

< Les tableaux | TutoCFrench | Les pointeurs >

print · rss · source
Page last modified on February 11, 2008, at 02:50 PM