
- •Государственный технический университет - Обнинский институт атомной энергетики е.А.Виноградова а.Г.Царина Программирование на языках высокого уровня.
- •Содержание
- •Введение. Подготовка и решение задач на компьютере.
- •Алгоритмы.
- •Основные свойства.
- •2.2 Способы представления алгоритмов.
- •2.3 Базовые структуры алгоритмов.
- •2.3.1 Линейная структура.
- •2.3.3.1. Цикл с предусловием:
- •2.3.3.2. Цикл с постусловием:
- •Типы данных.
- •3.1 Базовые типы данных.
- •Целый тип (int)
- •Символьный тип (char)
- •Расширенный символьный тип (wchar_t)
- •Логический тип (bool)
- •Типы с плавающей точкой (float, double и long double)
- •3.2 Переменные.
- •3.3 Ссылки.
- •3.4 Указатели.
- •3.3 Выражения.
- •3.3 .1 Операции.
- •4. Реализация базовых структур алгоритмов в языке с.
- •4.1 Оператор присвавания
- •4.2 Оператор «выражение»
- •4.3 Операторы ветвления
- •4.3.1 Условный оператор .
- •4.3.2. Оператор switch.
- •4.4 Операторы цикла
- •4.4.1 Циклы с предусловием
- •4.4.1.1 Цикл for.
- •4.4.1.2 Цикл с условием (while)
- •4.4.1 .3 Цикл с постусловием (do while)
- •5. Функции. Основные понятия
- •Определение функции
- •Рекурсивные функции.
- •Одномерные массивы.
- •6.1 Статические массивы.
- •6.2 Динамические массивы.
- •6.2.2 Функции преобразования динамических массивов.
- •7. Алгоритмы поиска и сортировки.
- •7.2 Последовательный поиск c барьером.
- •7.3 Дихотомический поиск в упорядоченом массиве.
- •7.4 Cортировка массивов.
- •7.4.1 Обменная сортировка (метод пузырька)
- •7.4.2 Метод "простой выбор".
- •7.4.3 Сортировка "прямое включение"
- •8 . Матрицы
- •8.1 Статические матрицы.
- •8.2 Динамические матрицы.
- •9. Строки в с.
- •1. Длина строки – strlen.
- •3. Копирование строк.
- •4. Объединение строк.
- •5. Поиск в строках
- •10. Cтруктуры.
9. Строки в с.
Cтрока – это последовательность символов. Существуют различные системы кодировки символов. Мы будем использовать таблицу кодировки ASCII. Кодом символа является его порядковый номер в таблице. Под каждый символ отводится 1 байт. В этом случае можно использовать 28=256 различных символов. Каждый символ имеет свой код (от 0 до 255).
Объявление и инициализация.
Строка представляет собой массив символов, поэтому и объявляется она именно как массив:
Например char s[80];
Реальная длина строки может быть меньше заданной. Как же определить, где заканчивается строка? Есть два решения:
1) хранить длину строки в отдельной ячейке (как в языке Паскаль);
2) выбрать один особый символ, который будет обозначать конец строки, причем в
середине строки этот символ не может встречаться.
В языке Си принят второй подход.
Символьная строка – это последовательность символом, которая заканчивается символом с кодом 0. Символ с кодом ноль не имеет никакого изображения, в программе его записывают как '\0'.
Символ с кодом ноль (обозначается как '\0') и цифра ноль (обозначается '0', имеет код
48) – это два разных символа.
Если массив символов будет использоваться как строка, надо выделять на 1 байт больше памяти. При выделении памяти глобальные переменные заполняются нулями, а локальные содержат «мусор». Начальное значение строки можно задать при объявлении в двойных кавычках после знака равенства:
char s[80] = "Слава России!";
Символы в кавычках будут записаны в начало массива s, а затем – признак окончания строки '\0'. Оставшиеся символы не меняются, и в локальных строках там будет «мусор». Можно написать и так
char s[] = " Слава России!";
В этом случае компилятор подсчитает символы в кавычках, выделит памяти на 1 байт больше и занесет в эту область саму строку и завершающий ноль. Аналогично можно выделить память на указатель:
char *s = " Слава России!";
Результат – тот же самый, что и в предыдущем случае, но теперь s – это указатель (переменная, в которой хранится адрес ячейки в памяти), и с ним можно работать так же, как с обычным указателем (присваивать, изменять и т.п.). Если строка не будет изменяться во время работы программы, то можно объявить константу (постоянную строку) так:
const char S[] = " Слава России!";
Заметьте, что одиночный символ(char c=’A’) записывается в апострофах, а символьная строка – в кавычках.
Ввод и вывод строк в С++.
Ввод строк не содержащих пробелов.
char s[80];
cin>>s;
Ввод строк , содержащих пробелы:
cin.getline(s,sizeof(s));
Функции для работы со строками.
В языке Си есть достаточно много специальных функций, которые работают со строками
– последовательностями символом с нулевым символом на конце. Для использования этих
функций надо включить в программу заголовочный файл
#include <string.h>
Многие из этих функций достаточно опасны при неправильном использовании, ведь они не проверяют, достаточно ли выделено памяти для копирования, перемещения или другой операции, единственным признаком окончания строки для них является символ '\0'.
Замечание. Работа со строками в С организована эффективно но ненадежно(любой сбой 0-кода приводит к серьезным ошибкам).