Chaînes de caractères et leur manipulation en C

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à créer et à manipuler des chaînes de caractères en programmation C. Vous explorerez différentes méthodes pour définir des chaînes, les formater à l'aide de printf, déterminer leur longueur avec strlen et les comparer avec strncmp. Ces opérations de base sur les chaînes sont essentielles pour développer des applications C robustes et flexibles.

Le laboratoire couvre les étapes suivantes : définir des chaînes à l'aide de la notation des pointeurs, définir des chaînes à l'aide de la notation des tableaux locaux, formater des chaînes avec printf, déterminer la longueur des chaînes avec strlen et comparer des chaînes avec strncmp. À la fin de ce laboratoire, vous aurez une bonne compréhension du travail avec les chaînes en C et pourrez appliquer ces techniques dans vos propres projets.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/operators("Operators") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/CompoundTypesGroup -.-> c/strings("Strings") c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/PointersandMemoryGroup -.-> c/memory_address("Memory Address") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/operators -.-> lab-438258{{"Chaînes de caractères et leur manipulation en C"}} c/arrays -.-> lab-438258{{"Chaînes de caractères et leur manipulation en C"}} c/strings -.-> lab-438258{{"Chaînes de caractères et leur manipulation en C"}} c/pointers -.-> lab-438258{{"Chaînes de caractères et leur manipulation en C"}} c/memory_address -.-> lab-438258{{"Chaînes de caractères et leur manipulation en C"}} c/output -.-> lab-438258{{"Chaînes de caractères et leur manipulation en C"}} end

Définir des chaînes à l'aide de la notation des pointeurs

Dans cette étape, vous apprendrez à définir des chaînes de caractères à l'aide de la notation des pointeurs en C. La notation des pointeurs offre un moyen flexible de créer et de manipuler des chaînes en programmation C.

Tout d'abord, créons un nouveau fichier pour démontrer la définition de chaînes avec la notation des pointeurs :

cd ~/project
touch string_pointer.c

Maintenant, entrez le code suivant :

#include <stdio.h>

int main() {
    // Define a string using pointer notation
    char *greeting = "Hello, C Programming!";

    // Print the string
    printf("Greeting: %s\n", greeting);

    return 0;
}

Compilez et exécutez le programme :

gcc string_pointer.c -o string_pointer
./string_pointer

Exemple de sortie :

Greeting: Hello, C Programming!

Analysons le code :

  • char *greeting déclare un pointeur vers un caractère (chaîne)
  • "Hello, C Programming!" est un littéral de chaîne stocké en mémoire
  • Le pointeur greeting pointe vers le premier caractère de la chaîne
  • printf() utilise le spécificateur de format %s pour afficher l'ensemble de la chaîne

Vous pouvez également modifier le pointeur pour qu'il pointe vers différentes parties de la chaîne :

#include <stdio.h>

int main() {
    char *greeting = "Hello, C Programming!";

    // Point to a specific part of the string
    char *partial = greeting + 7;

    printf("Original string: %s\n", greeting);
    printf("Partial string: %s\n", partial);

    return 0;
}

Exemple de sortie :

Original string: Hello, C Programming!
Partial string: C Programming!

Définir des chaînes à l'aide de la notation des tableaux locaux

Dans cette étape, vous apprendrez à définir des chaînes de caractères à l'aide de la notation des tableaux locaux en C. Cette méthode offre une autre façon de créer et d'initialiser des chaînes avec un contrôle plus direct sur le tableau de caractères.

Créons un nouveau fichier pour démontrer la définition de chaînes à l'aide de la notation des tableaux locaux :

cd ~/project
touch string_array.c

Entrez le code suivant :

#include <stdio.h>

int main() {
    // Define a string using local array notation
    char greeting[30] = "Hello, C Programming!";

    // Print the string
    printf("Greeting: %s\n", greeting);

    return 0;
}

Compilez et exécutez le programme :

gcc string_array.c -o string_array
./string_array

Exemple de sortie :

Greeting: Hello, C Programming!

Explorons quelques variantes de la notation des tableaux locaux :

#include <stdio.h>

int main() {
    // Define an array with explicit initialization
    char name[10] = {'J', 'o', 'h', 'n', '\0'};

    // Define an array with partial initialization
    char city[20] = "New York";

    // Define an array without specifying size
    char message[] = "Welcome to C Programming!";

    printf("Name: %s\n", name);
    printf("City: %s\n", city);
    printf("Message: %s\n", message);

    return 0;
}

Exemple de sortie :

Name: John
City: New York
Message: Welcome to C Programming!

Points clés concernant la notation des tableaux locaux :

  • Vous pouvez spécifier explicitement la taille du tableau
  • Le '\0' (caractère de fin de chaîne) est crucial pour marquer la fin de la chaîne
  • Les tableaux peuvent être initialisés avec des caractères individuels ou sous forme de littéraux de chaîne
  • Lorsqu'ils ne sont pas entièrement initialisés, les éléments restants sont mis à zéro

Formater des chaînes avec printf

Dans cette étape, vous apprendrez à utiliser printf() pour formater des chaînes et divers types de données en C. La fonction printf() offre des capacités puissantes de formatage de chaînes.

Créons un nouveau fichier pour démontrer le formatage de chaînes :

cd ~/project
touch string_formatting.c

Entrez le code suivant pour explorer différentes options de formatage :

#include <stdio.h>

int main() {
    // Basic string formatting
    char name[] = "Alice";
    int age = 30;
    float height = 5.8;

    // Simple string output
    printf("Name: %s\n", name);

    // Formatting with multiple variables
    printf("Profile: %s is %d years old\n", name, age);

    // Formatting with floating-point precision
    printf("Height: %.1f meters\n", height);

    // Width and alignment
    printf("Name (right-aligned): %10s\n", name);
    printf("Name (left-aligned):  %-10s\n", name);

    // Mixing different format specifiers
    printf("Details: %s, %d years, %.1f meters\n", name, age, height);

    return 0;
}

Compilez et exécutez le programme :

gcc string_formatting.c -o string_formatting
./string_formatting

Exemple de sortie :

Name: Alice
Profile: Alice is 30 years old
Height: 5.8 meters
Name (right-aligned):      Alice
Name (left-aligned): Alice
Details: Alice, 30 years, 5.8 meters

Spécificateurs de format courants :

  • %s : Chaînes de caractères
  • %d : Entiers
  • %f : Nombres à virgule flottante
  • %.1f : Nombres à virgule flottante avec 1 décimale
  • %10s : Alignement à droite avec une largeur de 10 caractères
  • %-10s : Alignement à gauche avec une largeur de 10 caractères

Explorons un formatage plus avancé :

#include <stdio.h>

int main() {
    // Hexadecimal and octal representations
    int number = 255;
    printf("Decimal: %d\n", number);
    printf("Hexadecimal: %x\n", number);
    printf("Octal: %o\n", number);

    // Padding with zeros
    printf("Padded number: %05d\n", 42);

    return 0;
}

Exemple de sortie :

Decimal: 255
Hexadecimal: ff
Octal: 377
Padded number: 00042

Déterminer la longueur d'une chaîne avec strlen

Dans cette étape, vous apprendrez à utiliser la fonction strlen() pour déterminer la longueur des chaînes de caractères en C. La fonction strlen() fait partie de la bibliothèque <string.h> et offre un moyen simple de compter les caractères dans une chaîne.

Créons un nouveau fichier pour démontrer le calcul de la longueur d'une chaîne :

cd ~/project
touch string_length.c

Entrez le code suivant pour explorer strlen() :

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

int main() {
    // Define strings of different lengths
    char greeting[] = "Hello, World!";
    char name[] = "Alice";
    char empty[] = "";

    // Calculate and print string lengths
    printf("Greeting: %s\n", greeting);
    printf("Greeting length: %lu characters\n", strlen(greeting));

    printf("Name: %s\n", name);
    printf("Name length: %lu characters\n", strlen(name));

    printf("Empty string length: %lu characters\n", strlen(empty));

    return 0;
}

Compilez et exécutez le programme :

gcc string_length.c -o string_length
./string_length

Exemple de sortie :

Greeting: Hello, World!
Greeting length: 13 characters
Name: Alice
Name length: 5 characters
Empty string length: 0 characters

Explorons un exemple plus pratique d'utilisation de strlen() :

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

int main() {
    char input[100];

    printf("Enter a string: ");
    fgets(input, sizeof(input), stdin);

    // Remove newline character if present
    input[strcspn(input, "\n")] = 0;

    // Calculate and print string length
    size_t length = strlen(input);

    printf("You entered: %s\n", input);
    printf("String length: %lu characters\n", length);

    // Demonstrate length-based operations
    if (length > 10) {
        printf("This is a long string!\n");
    } else if (length > 0) {
        printf("This is a short string.\n");
    } else {
        printf("You entered an empty string.\n");
    }

    return 0;
}

Points clés concernant strlen() :

  • Renvoie le nombre de caractères avant le caractère de fin de chaîne (null terminator)
  • Ne compte pas le caractère de fin de chaîne
  • Fonctionne avec les tableaux de caractères et les littéraux de chaîne
  • Fait partie de la bibliothèque <string.h>, donc incluez cet en-tête
  • Renvoie un type size_t (entier non signé long)

Comparer des chaînes avec strncmp

Dans cette étape, vous apprendrez à utiliser la fonction strncmp() pour comparer des chaînes de caractères en C. La fonction strncmp() vous permet de comparer un nombre spécifié de caractères entre deux chaînes.

Créons un nouveau fichier pour démontrer la comparaison de chaînes :

cd ~/project
touch string_compare.c

Entrez le code suivant pour explorer strncmp() :

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

int main() {
    // Define strings for comparison
    char str1[] = "Hello, World!";
    char str2[] = "Hello, Everyone!";
    char str3[] = "Hello, World!";

    // Compare entire strings
    printf("Full string comparison:\n");
    int result1 = strncmp(str1, str2, strlen(str1));
    int result2 = strncmp(str1, str3, strlen(str1));

    printf("str1 vs str2: %d\n", result1);
    printf("str1 vs str3: %d\n", result2);

    // Compare first few characters
    printf("\nPartial string comparison:\n");
    int result3 = strncmp(str1, str2, 7);
    printf("First 7 characters of str1 vs str2: %d\n", result3);

    return 0;
}

Compilez et exécutez le programme :

gcc string_compare.c -o string_compare
./string_compare

Exemple de sortie :

Full string comparison:
str1 vs str2: -1
str1 vs str3: 0

Partial string comparison:
First 7 characters of str1 vs str2: 0

Créons un exemple plus pratique de comparaison de chaînes :

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

int main() {
    // Password verification example
    char stored_password[] = "SecretPass123";
    char input_password[20];

    printf("Enter password: ");
    scanf("%19s", input_password);

    // Compare first 10 characters of the password
    int comparison = strncmp(stored_password, input_password, 10);

    if (comparison == 0) {
        printf("Access granted!\n");
    } else {
        printf("Access denied!\n");
    }

    return 0;
}

Points clés concernant strncmp() :

  • Compare jusqu'à un nombre spécifié de caractères
  • Renvoie 0 si les chaînes correspondent sur la longueur spécifiée
  • Renvoie une valeur négative si la première chaîne est inférieure lexicographiquement
  • Renvoie une valeur positive si la première chaîne est supérieure lexicographiquement
  • Fait partie de la bibliothèque <string.h>
  • Utile pour les comparaisons partielles de chaînes

Comprendre les valeurs de retour de strncmp() :

  • 0 : Les chaînes sont égales sur la longueur spécifiée
  • < 0 : La première chaîne précède la deuxième chaîne
  • 0 : La première chaîne suit la deuxième chaîne

Résumé

Dans ce laboratoire, vous avez appris à définir des chaînes de caractères à la fois à l'aide de la notation des pointeurs et de la notation des tableaux locaux en programmation C. Avec la notation des pointeurs, vous pouvez créer et manipuler des chaînes de manière flexible en utilisant un pointeur sur un caractère. Avec la notation des tableaux locaux, vous avez un contrôle plus direct sur le tableau de caractères. Vous avez également appris à formater des chaînes avec printf(), à déterminer la longueur d'une chaîne avec strlen() et à comparer des chaînes avec strncmp(). Ces techniques de manipulation de chaînes sont des compétences fondamentales pour travailler avec des données textuelles en C.