Массивы текстовых строк

If (strcmp (S1, S2))

Обработка текстовых строк

При обработке текстовых строк обычно используется набор типовых операций, к которым можно отнести:

· определение фактической длины текста записанного в символьный массив;

· копирование текста из одной строки в другую;

· объединение двух строк;

· лексикографическое сравнение строк – в алфавитном порядке (больше, меньше, равно)

и др.

Написать соответствующие функции обработки достаточно просто. Вот два примера:

Пример 1: Функция определения фактической длины строки (с нулевым символом):

unsigned my_StrLen(char *S)

{

unsigned L = 0;

while (S[L]) // При достижении символа с числовым значением 0 выход из цикла

++L;

return L;

}

Пример 2: Функция добавления строки S2 в конец строки S1 (обе строки должны заканчиваться нулевым символом, и строка S1 должна иметь достаточную длину для добавления символов строки S2):

void my_StrCat(char *S1, char *S2)

{

unsigned j = my_StrLen(S1);

for (unsigned i = 0; S2 [i]; ++ i, ++j)

S1 [j] = S2 [i];

S1 [++j] = '\0';

}

Все достаточно просто. Тем более, что делать это необходимости нет, так как аналогичные и многие другие функции по обработке строк, завершающихся нулевым символом, уже имеются в библиотеках. Одну из таких библиотек можно подключить к программе с помощью заголовочного файла <cstring>. Вот наиболее распространенные функции из этой библиотеки:

Функция strlen(char *s) – возвращает фактическую длину текстовой строки, хранящейся в символьном массиве s (см. аналог my_StrLen(char *S)).

Функция strcpy(char *dest, char *source) – копирует содержимое строки source в строку dest.

Функция strcat(char *s1, char *s2) – добавляет содержимое строки s2 в конец строки s1.

Функция strcmp(char *s1, char *s2) – осуществляет лексикографическое сравнение строк s1 и s2. Возвращает значение 0, если строки одинаковы (равны), значение большее 0 при s1 > s2 и отрицательное значение при s1 < s2.

Пример. Имеются две строки S1 и S2, содержащие некоторые тексты. Необходимо поменять содержимое этих строк так, чтобы строка S2 содержала “больший” текст. Реализация:

char S1 [41], S2 [41], B [41];

cin >> S1;

cin >> S2;

{

strcpy(B, S1);

strcpy(S1, S2);

strcpy(S2, B);

}

cout << S1 << endl;

cout << S2 << endl;

В этой же библиотеке содержатся другие варианты упомянутых функций и множество других полезных обработчиков строк.

Широкое применение в программировании получила специальная форма двумерных массивов символов, которые можно рассматривать как одномерный массив строк, заканчивающихся нулевым символом. Определяются такие массивы следующим образом:

char arr_str [30] [21];

Этот массив содержит 30 строк. Каждая строка может содержать текст из максимум 20 символов + нулевой символ.

Для того чтобы обратиться к некоторой строке этого массива достаточно указать только первый индекс. Например:

strcpy (arr_str [10], “Иванов”);

cout << arr_str [10] << endl; // На экран выведено “Иванов”

Инициализация такого массива:

char arr_str [3] [21] = {“Иванов”, “Петров”, “Сидоров”};

cout << arr_str [1] << endl; // На экране “Петров”

или так:

char arr_str [ ] [21] = {“Иванов”, “Петров”, “Сидоров”};

cout << arr_str [2] << endl; // На экране “Сидоров”

Для получения доступа к отдельным символам строк необходимо указывать два индекса, как в обычном двумерном массиве:

cout << arr_str [2] [2]; // На экране буква ‘ д ’ из строки “Сидоров”


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: