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]; // На экране буква ‘ д ’ из строки “Сидоров”