Лекции по проге / 11_Строки_Основы (1)
.pdf
Лекция №11.1 Строки: основы
Представление строк в языке Си Представление многострочного текста Ввод-вывод строк Обработка строк
1
Представление строк в языке Си
В языке Си нет специального типа данных для представления строк
В языке Си строка - это массив символов, который заканчивается нуль-символом (символ с кодом 0 или '\0')
Нуль-символ сигнализирует о фактическом конце строки
char_array |
0 |
1 |
2 |
3 |
4 |
5 |
|
|
|
|
|
|
|
|
|
|
массив символов |
||||||||
|
П |
р |
|
|
и |
|
|
м |
е |
|
|
р |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
str |
0 |
1 |
2 |
3 |
4 |
5 |
|
6 |
|
7 |
8 |
|
|
|
|
строка |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
П |
р |
|
|
и |
|
|
м |
е |
|
|
р |
\0 |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2
Объявление строк
char <имя массива>[<кол-во элементов>];
<кол-во элементов> - целочисленное выражение, операндами которого являются константы
<кол-во элементов> = <кол-во символов> + 1
Размер памяти, выделяемой под строку:
3 |
Кол-во байт = <кол-во элементов> |
|
Задание
Объявить строку для хранения ФИО
"Козлов Антон Петрович"
4
Пример объявления строки
Определим длину ФИО
"Козлов Антон Петрович"
Длина ФИО составляет 21 буквы вместе с 2-мя пробелами
Объявим массив из 22 символов: 21 символ для ФИО + 1 символ для нуль-символа
char FIO[22];
5
Инициализация строк
Инициализация символьными константами char <имя массива>[[<кол-во элементов>]] =
{ <символьная константа 1>,
... , <символьная константа N>, '\0'};
Инициализация строковой константой
char <имя массива>[[<кол-во элементов>]] =
6 |
<строковая константа>; |
Задание
Объявить строку для хранения 30 символов, различными способами записать в нее "пустую" строку (которая не содержит символов)
7
Пример инициализации строки
Так как строка должна хранить 30 значимых символов, то размер массива составляет 31 символ (дополнительный символ для нуль-символа)
"Пустая" строка не содержит значащих символов, но содержит нуль-символ
1) |
char |
emptyStr[31] |
= |
{'\0'}; |
// |
1-й |
вариант |
2) |
char |
emptyStr[31] |
= |
""; |
// |
2-й |
вариант |
8
Обращение к символу строки
Обращение к символу строки – это обращение к элементу массива:
<имя массива>[<индекс символа>]
Как результат возвращается символ строки или элемент массива (l-value выражение)
0 |
1 |
2 |
|
3 |
|
4 |
|
|
5 |
6 |
7 |
8 |
|
||||||||
str |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П |
|
р |
|
и |
|
|
м |
|
е |
|
р |
|
\0 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
9 |
|
|
|
|
str[3] |
|
|
|
|
|
|
|
|
||||||||
Обращение к подстроке
Обращение к подстроке – обращение ко 2-й части строки:
<имя массива> + <индекс символа>
<индекс символа> – индекс символа, с которого начинается подстрока
Как |
результат возвращается указатель (адрес) на |
||||||||||||||||||||||
первый символ подстроки |
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
0 |
1 |
2 |
|
|
3 |
4 |
5 |
6 |
|
7 |
8 |
|
|
|||||||||
|
str |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П |
|
р |
|
и |
|
|
|
м |
|
е |
|
р |
|
\0 |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
10 |
str + 3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
