Strings und deren Manipulation in C

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden Sie lernen, wie Sie Strings in der C-Programmierung erstellen und manipulieren. Sie werden verschiedene Methoden erkunden, um Strings zu definieren, sie mit printf zu formatieren, ihre Länge mit strlen zu bestimmen und sie mit strncmp zu vergleichen. Diese grundlegenden String-Operationen sind für die Entwicklung robuster und flexibler C-Anwendungen unerlässlich.

Das Lab umfasst die folgenden Schritte: Definieren von Strings mit Zeigernotation, Definieren von Strings mit lokaler Array-Notation, Formatieren von Strings mit printf, Bestimmen der Stringlänge mit strlen und Vergleichen von Strings mit strncmp. Am Ende dieses Labs werden Sie ein solides Verständnis für die Arbeit mit Strings in C haben und in der Lage sein, diese Techniken in Ihren eigenen Projekten anzuwenden.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 92% ist. Es hat eine positive Bewertungsrate von 86% von den Lernenden erhalten.

Definieren von Strings mit Zeigernotation

In diesem Schritt werden Sie lernen, wie Sie Strings in C mit Zeigernotation definieren. Die Zeigernotation bietet eine flexible Möglichkeit, Strings in der C-Programmierung zu erstellen und zu manipulieren.

Zunächst erstellen wir eine neue Datei, um die String-Definition mit Zeigernotation zu demonstrieren:

cd ~/project
touch string_pointer.c

Geben Sie nun den folgenden Code ein:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc string_pointer.c -o string_pointer
./string_pointer

Beispielausgabe:

Greeting: Hello, C Programming!

Lassen Sie uns den Code analysieren:

  • char *greeting deklariert einen Zeiger auf ein Zeichen (String)
  • "Hello, C Programming!" ist ein String-Literal, das im Speicher gespeichert ist
  • Der Zeiger greeting zeigt auf das erste Zeichen des Strings
  • printf() verwendet den Format-Spezifizierer %s, um den gesamten String auszugeben

Sie können auch den Zeiger ändern, um auf verschiedene Teile des Strings zu zeigen:

#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;
}

Beispielausgabe:

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

Definieren von Strings mit lokaler Array-Notation

In diesem Schritt werden Sie lernen, wie Sie Strings in C mit lokaler Array-Notation definieren. Diese Methode bietet eine weitere Möglichkeit, Strings zu erstellen und zu initialisieren, wobei Sie direkter über das Zeichenarray kontrollieren können.

Erstellen wir eine neue Datei, um die String-Definition mit lokaler Array-Notation zu demonstrieren:

cd ~/project
touch string_array.c

Geben Sie den folgenden Code ein:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc string_array.c -o string_array
./string_array

Beispielausgabe:

Greeting: Hello, C Programming!

Lassen Sie uns einige Variationen der lokalen Array-Notation untersuchen:

#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;
}

Beispielausgabe:

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

Wichtige Punkte zur lokalen Array-Notation:

  • Sie können die Arraygröße explizit angeben.
  • Das '\0' (Null-Terminator) ist entscheidend, um das Ende des Strings zu markieren.
  • Arrays können mit einzelnen Zeichen oder als String-Literale initialisiert werden.
  • Wenn das Array nicht vollständig initialisiert wird, werden die verbleibenden Elemente auf Null gesetzt.

Formatieren von Strings mit printf

In diesem Schritt werden Sie lernen, wie Sie printf() verwenden, um Strings und verschiedene Datentypen in C zu formatieren. Die printf()-Funktion bietet leistungsstarke String-Formatierungsmöglichkeiten.

Erstellen wir eine neue Datei, um die String-Formatierung zu demonstrieren:

cd ~/project
touch string_formatting.c

Geben Sie den folgenden Code ein, um verschiedene Formatierungsoptionen zu erkunden:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc string_formatting.c -o string_formatting
./string_formatting

Beispielausgabe:

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

Häufige Format-Spezifizierer:

  • %s: Strings
  • %d: Ganzzahlen
  • %f: Fließkommazahlen
  • %.1f: Fließkommazahl mit 1 Dezimalstelle
  • %10s: Rechtsbündig mit einer Breite von 10 Zeichen
  • %-10s: Linksbündig mit einer Breite von 10 Zeichen

Lassen Sie uns fortgeschrittenere Formatierungen erkunden:

#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;
}

Beispielausgabe:

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

Bestimmen der Stringlänge mit strlen

In diesem Schritt werden Sie lernen, wie Sie die strlen()-Funktion verwenden, um die Länge von Strings in C zu bestimmen. Die strlen()-Funktion ist Teil der <string.h>-Bibliothek und bietet eine einfache Möglichkeit, die Zeichen in einem String zu zählen.

Erstellen wir eine neue Datei, um die Berechnung der Stringlänge zu demonstrieren:

cd ~/project
touch string_length.c

Geben Sie den folgenden Code ein, um strlen() zu erkunden:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc string_length.c -o string_length
./string_length

Beispielausgabe:

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

Lassen Sie uns ein praktischeres Beispiel für die Verwendung von strlen() betrachten:

#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;
}

Wichtige Punkte zu strlen():

  • Gibt die Anzahl der Zeichen vor dem Null-Terminator zurück.
  • Zählt den Null-Terminator nicht mit.
  • Funktioniert mit Zeichenarrays und String-Literalen.
  • Ist Teil der <string.h>-Bibliothek, daher diese Header-Datei einbinden.
  • Gibt einen Wert vom Typ size_t (vorzeichenlose Ganzzahl vom Typ long) zurück.

Vergleichen von Strings mit strncmp

In diesem Schritt werden Sie lernen, wie Sie die strncmp()-Funktion verwenden, um Strings in C zu vergleichen. Die strncmp()-Funktion ermöglicht es Ihnen, eine bestimmte Anzahl von Zeichen zwischen zwei Strings zu vergleichen.

Erstellen wir eine neue Datei, um den String-Vergleich zu demonstrieren:

cd ~/project
touch string_compare.c

Geben Sie den folgenden Code ein, um strncmp() zu erkunden:

#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;
}

Kompilieren und führen Sie das Programm aus:

gcc string_compare.c -o string_compare
./string_compare

Beispielausgabe:

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

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

Lassen Sie uns ein praktischeres Beispiel für den String-Vergleich erstellen:

#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;
}

Wichtige Punkte zu strncmp():

  • Vergleicht bis zu einer bestimmten Anzahl von Zeichen.
  • Gibt 0 zurück, wenn die Strings für die angegebene Länge übereinstimmen.
  • Gibt einen negativen Wert zurück, wenn der erste String lexikographisch kleiner ist.
  • Gibt einen positiven Wert zurück, wenn der erste String lexikographisch größer ist.
  • Ist Teil der <string.h>-Bibliothek.
  • Nützlich für partielle String-Vergleiche.

Verständnis der Rückgabewerte von strncmp():

  • 0: Die Strings sind für die angegebene Länge gleich.
  • < 0: Der erste String kommt vor dem zweiten String.
  • 0: Der erste String kommt nach dem zweiten String.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Strings in der C-Programmierung sowohl mit Zeiger-Notation als auch mit lokaler Array-Notation definieren können. Mit der Zeiger-Notation können Sie Strings flexibel erstellen und manipulieren, indem Sie einen Zeichenzeiger verwenden. Mit der lokalen Array-Notation haben Sie direkteren Einfluss auf das Zeichenarray. Sie haben auch gelernt, wie Sie Strings mit printf() formatieren, die Stringlänge mit strlen() bestimmen und Strings mit strncmp() vergleichen können. Diese String-Manipulationstechniken sind grundlegende Fähigkeiten für die Arbeit mit Textdaten in C.