- •Конспект лекций Часть 1 Оглавление
- •Часть 1 1
- •Введение
- •1. Этапы и проблемы решения задач с использованием компьютера
- •Алфавит языка
- •Ключевые слова
- •Идентификаторы
- •Знаки операций
- •Константы
- •Комментарии
- •2.3. Структура и основные элементы программы
- •2.4. Трансляция программ и их выполнение
- •3. Стандартные (базовые) типы данных, операции и выражения
- •3.1. Типы данных, переменные и константы Понятие типов данных
- •Классификация простых предопределенных типов данных
- •Переменные, константы
- •3.2. Целочисленные типы данных
- •3.3. Вещественные типы данных
- •3.4. Логический тип данных
- •3.5. Символьный тип данных
- •3.6. Операции и выражения
- •Преобразования типов данных
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные (битовые) операции
- •Операции составного присваивания
- •Условная операция
- •Операция sizeof
- •Приоритеты рассмотренных операций
- •3.7. Ввод и вывод простых типов данных
- •Вывод текстовых строк
- •Ввод/вывод арифметических типов данных
- •Форматирование ввода / вывода
- •4.1. Идеи структурного программирования
- •Условная инструкция (if)
- •Инструкция множественного выбора (switch)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Итерационный цикл (for)
- •Инструкции перехода
- •5. Приемы программирования циклов
- •5.1. Рекуррентные вычисления
- •5.2. Инвариант цикла
- •6. Массивы
- •6.1. Понятие массива
- •6.2. Объявление массивов Объявление одномерных массивов
- •Объявление многомерных массивов
- •6.3. Ввод-вывод массивов
- •Вывод массивов
- •Ввод массивов
- •6.4. Текстовые строки как массивы символов
- •Определение текстовой строки
- •Ввод текстовых строк с клавиатуры
- •Обработка текстовых строк
- •Массивы текстовых строк
- •7. Разработка программ при работе с массивами
- •Не успел дописать. Некоторые примеры по этому разделу в Приложениях
Обработка текстовых строк
При обработке текстовых строк обычно используется набор типовых операций, к которым можно отнести:
определение фактической длины текста записанного в символьный массив;
копирование текста из одной строки в другую;
объединение двух строк;
лексикографическое сравнение строк – в алфавитном порядке (больше, меньше, равно)
и др.
Написать соответствующие функции обработки достаточно просто. Вот два примера:
Пример 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;
if (strcmp (S1, 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]; // На экране буква ‘д’ из строки “Сидоров”