Создание итераторов для строковых массивов на языке C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии вы научитесь создавать и перебирать строковый массив на языке программирования C. Вы объявите строковый массив, переберете его с помощью цикла while, обработаете строки, завершающиеся нулевым символом, и выведете каждую строку из массива. Эти навыки являются обязательными для работы с текстовыми данными и создания более сложных приложений на языке C.

В лабораторном занятии рассматриваются следующие шаги: объявление строкового массива, перебор массива с помощью цикла while, обработка строк, завершающихся нулевым символом, вывод каждой строки из массива, а также компиляция и запуск программы на языке C. Завершив это лабораторное занятие, вы получите твердое понимание работы со строковыми массивами на языке C, что является фундаментальным концептом в программировании на C.

Объявление строкового массива

На этом шаге вы научитесь объявлять строковый массив на языке программирования C. Строковые массивы - это мощные структуры данных, которые позволяют хранить несколько строк в одной переменной.

  1. Откройте WebIDE и создайте новый файл с именем string-array.c в директории ~/project:
cd ~/project
touch string-array.c
  1. Откройте файл в WebIDE и добавьте следующий код:
#include <stdio.h>

void main() {
    const char* fruits[] = {
        "Apple",
        "Banana",
        "Cherry",
        "Date",
        NULL
    };
}

Этот код демонстрирует, как объявить строковый массив на языке C. Разберем основные компоненты:

  • const char* указывает на массив указателей на константные строки
  • fruits[] - это имя массива
  • Массив содержит четыре названия фруктов в виде строк
  • NULL используется для обозначения конца массива, что будет полезно при последующих итерациях

Обратите внимание, что этот массив завершается нулевым символом (null-terminated), то есть последний элемент равен NULL. Это распространенная практика в языке C для строковых массивов, так как это помогает определить конец массива при его переборе.

Перебор массива с использованием цикла while

На этом шаге вы научитесь перебирать строковый массив с использованием цикла while на языке программирования C. Продолжая работу с предыдущим шагом, мы изменим файл string-array.c для вывода содержимого массива фруктов.

  1. Откройте файл string-array.c в WebIDE:
  2. Обновите код, добавив цикл while для перебора массива:
#include <stdio.h>

void main() {
    const char* fruits[] = {
        "Apple",
        "Banana",
        "Cherry",
        "Date",
        NULL
    };

    int i = 0;
    while (fruits[i]) {
        printf("Fruit: %s\n", fruits[i]);
        ++i;
    }
}

Разберем логику перебора:

  • int i = 0 инициализирует счетчик индекса
  • while (fruits[i]) продолжает цикл до тех пор, пока не достигнет нулевого терминатора (NULL terminator)
  • printf("Fruit: %s\n", fruits[i]) выводит каждое название фрукта
  • ++i увеличивает индекс, чтобы перейти к следующему элементу
  1. Скомпилируйте программу:
gcc string-array.c -o string-array
  1. Запустите скомпилированную программу:
./string-array

Пример вывода:

Fruit: Apple
Fruit: Banana
Fruit: Cherry
Fruit: Date

Цикл while позволяет перебирать массив, проверяя на наличие нулевого терминатора, который сигнализирует о конце массива. Этот метод является распространенным и эффективным способом обхода строковых массивов на языке C.

Обработка строк, завершающихся нулевым символом

На этом шаге вы узнаете о строках, завершающихся нулевым символом (null-terminated strings), и о том, как они используются для обозначения конца строковых массивов в программировании на языке C. Понимание нулевого завершения (null termination) является важным аспектом при работе со строковыми массивами.

  1. Откройте файл string-array.c в WebIDE:
  2. Измените код, чтобы продемонстрировать нулевое завершение и длину строки:
#include <stdio.h>
#include <string.h>

void main() {
    const char* fruits[] = {
        "Apple",
        "Banana",
        "Cherry",
        "Date",
        NULL
    };

    int i = 0;
    while (fruits[i]) {
        printf("Fruit: %s\n", fruits[i]);
        printf("Length of %s: %lu\n", fruits[i], strlen(fruits[i]));
        ++i;
    }

    printf("Total number of fruits: %d\n", i);
}

Основные изменения:

  • Добавлено #include <string.h> для использования функции strlen()
  • Использована функция strlen() для демонстрации длины строки
  • Добавлен подсчет общего количества фруктов с использованием индекса цикла
  1. Скомпилируйте программу:
gcc string-array.c -o string-array
  1. Запустите скомпилированную программу:
./string-array

Пример вывода:

Fruit: Apple
Length of Apple: 5
Fruit: Banana
Length of Banana: 6
Fruit: Cherry
Length of Cherry: 6
Fruit: Date
Length of Date: 4
Total number of fruits: 4

Понимание нулевого завершения:

  • NULL в конце массива действует как сигнальное значение (sentinel value)
  • Это помогает определить конец массива при его переборе
  • Функция strlen() работает путем подсчета символов до тех пор, пока не достигнет нулевого терминатора (\0)
  • Цикл останавливается, когда встречает указатель NULL

Вывод каждой строки из массива

На этом шаге вы рассмотрите различные способы вывода строк из массива, включая варианты форматирования и продвинутые техники печати.

  1. Откройте файл string-array.c в WebIDE:
  2. Обновите код, чтобы продемонстрировать несколько методов вывода:
#include <stdio.h>
#include <string.h>

void main() {
    const char* fruits[] = {
        "Apple",
        "Banana",
        "Cherry",
        "Date",
        NULL
    };

    // Method 1: Basic printing with index
    printf("Method 1: Basic Printing\n");
    int i = 0;
    while (fruits[i]) {
        printf("%d: %s\n", i + 1, fruits[i]);
        ++i;
    }

    // Method 2: Formatted printing with alignment
    printf("\nMethod 2: Formatted Printing\n");
    i = 0;
    while (fruits[i]) {
        printf("| %-10s | Length: %2lu |\n", fruits[i], strlen(fruits[i]));
        ++i;
    }

    // Method 3: Printing with additional formatting
    printf("\nMethod 3: Advanced Printing\n");
    i = 0;
    while (fruits[i]) {
        printf("Fruit #%d: [%s] has %lu characters\n",
               i + 1, fruits[i], strlen(fruits[i]));
        ++i;
    }
}
  1. Скомпилируйте программу:
gcc string-array.c -o string-array
  1. Запустите скомпилированную программу:
./string-array

Пример вывода:

Method 1: Basic Printing
1: Apple
2: Banana
3: Cherry
4: Date

Method 2: Formatted Printing
| Apple      | Length:  5 |
| Banana     | Length:  6 |
| Cherry     | Length:  6 |
| Date       | Length:  4 |

Method 3: Advanced Printing
Fruit #1: [Apple] has 5 characters
Fruit #2: [Banana] has 6 characters
Fruit #3: [Cherry] has 6 characters
Fruit #4: [Date] has 4 characters

Продемонстрированные техники вывода:

  • Простой вывод с использованием индекса и функции printf()
  • Форматированный вывод с указанием ширины и выравниванием
  • Продвинутый вывод с дополнительной информацией
  • Использование функции strlen() для получения длины строки

Резюме

В этом практическом занятии (lab) вы научились объявлять строковый массив на языке программирования C, что позволяет хранить несколько строк в одной переменной. Вы также узнали, как перебирать массив с использованием цикла while, работать со строками, завершающимися нулевым символом (null-terminated strings), и выводить каждую строку из массива. Эти техники являются фундаментальными для работы со строковыми структурами данных в языке C и служат прочной основой для более сложных задач по манипуляции строками.