- •Конспект лекций по предмету
- •Раздел 1. Основы языка.
- •Тема 1. История создания языка Си. Достоинства языка. Использование языка Си.
- •Тема 2.
- •Структура простой программы.
- •Описание переменных.
- •3.Использование комментариев. Читаемость.
- •Зарезервированные слова.
- •Раздел.2 Элементы языка. Выражения.
- •Тема 3.
- •3. Выражения
- •Раздел 3. Операторы языка. Условный оператор if
- •Оператор switch
- •Операторы цикла
- •Цикл с параметром (for)
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Раздел 4. Указатели и массивы Указатели
- •Инициализация указателей
- •Присваивание указателю адреса существующего объекта:
- •Присваивание указателю адреса области памяти в явном виде:
- •Присваивание пустого значения:
- •Выделение участка динамической памяти и присваивание её адреса указателю:
- •Внимание!
- •Объявляется массив из 10 указателей на функции без параметров, возвращающих указатели на int.
- •Раздел 5. Строки. Работа со строковыми данными
- •Функции работы со строками и символами
- •Символьные строки и строковые функции
- •Ввод-вывод строк средствами с.
- •1) Scanf, printf – вводит/выводит одно слово:
- •2) Ввести предложение:
- •3) Специальные средства ввода – вывода строк – gets и puts
- •Различия между массивом символов и указателем на строку
- •Массивы строк
- •Функции с для обработки строк
- •Strcat(), strncat(). Соеденение строк.
- •Другие функции для строк(краткое описание)
- •Раздел 6. Структуры. Структуры (struct)
- •Раздел 7. Функции (подпрограммы). Функции
- •Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Раздел 8. Файлы(потоки) Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод в поток
- •Закрытие потока
- •Обработка ошибок
Функции работы со строками и символами
Строка представляет собой массив символов, заканчивающийся нуль-символом. В C++ есть две возможности работы со строками: функции, унаследованные из библиотеки С (заголовочный файл <string.h> или <cstring>), и библиотечный класс C++ string, предоставляющий более широкие возможности представления, обработки и контроля строк (он рассматривается в разделе «Строки».
Библиотека С содержит функции копирования строк (strcpy. strncpy), сравнения (strcmp, strncmp), объединения строк (strcat. strncat), поиска подстроки (strstr), поиска вхождения символа (strchr, strrchr, strpbrk), определения длины строки (strlen) и другие. Полный список функций приведен в приложении 6.
В заголовочных файлах <stdlib.h> и <cstdlib> содержатся полезные функции преобразования строк в числа (обратные преобразования можно сделать с помощью функции sprintf): double atof(const char* p) преобразует переданную строку в double; int atoi (const char* p) преобразует переданную строку в int; long atol (const char* p) преобразует переданную строку в long.
Пробелы и табуляции в начале строки пропускаются. Преобразование прекращается при встрече недопустимого символа или конца строки. Если строку нельзя преобразовать в число, возвращается 0. Если число выходит за пределы диапазона данного типа, переменной errno (заголовочный файл <cerrno>) присваивается значение ERANGE и возвращается допустимое число.
Пример (программа заполняет массив типа double из строки):
#include <stdio.h> #include <string.h>
#include <stdlib.h>
int main(){
char s[] = "2. 38.5. 70. 0. 0. 1". *p = s:
double m[10]:
int i = 0:
do{
m[i++] = atof(p);
if (i>9)break;
}while(p = strchr(p, ','), p++);
for( int k = 0; k<; k++) printf("%5.2f ". m[k]);
return 0:
}
Для работы с символами в стандартной библиотеке (заголовочные файлы <ctype. h> и <cctype>) есть следующие функции:
Имя |
проверка на принадлежность символа множеству |
isalnum |
букв и цифр (A-Z, a-z, 0-9) |
isalfa |
букв (A-Z, a-z) |
iscntrl |
управляющих символов (с кодами 0..31 и 127) |
isdigit |
цифр (0-9) |
isgraph |
печатаемых символов, кроме пробела (isalfa | isdigit | ispunct) |
islower |
букв нижнего регистра (a-z) |
isprint |
печатаемых символов |
ispunct |
знаков пунктуации |
isspace |
символов-разделителей |
isupper |
букв верхнего регистра (A-Z) |
isxdigit |
шестнадцатиричных цифр (A-F, a-f, 0-9) |
Функции принимают величину типа int и возвращают значение true, если условие выполняется. Рекомендуется пользоваться стандартными функциями, а не писать собственные циклы проверки, так как это снижает количество ошибок в программе.
Кроме описанных выше, в библиотеке есть функции tolower и toupper, переводящие символ латинского алфавита соответственно в нижний и верхний регистр.
