
- •Строки и символы
- •Описание строк
- •Ввод-вывод строк
- •Операции со строками
- •Строковые библиотечные функции
- •Преобразование строки в целое число
- •Работа с символами
- •I. Исходные данные и результаты
- •II. Алгоритм решения задачи
- •I. Исходные данные и результаты
- •II. Алгоритм решения задачи
- •III. Программа и тестовые примеры
Преобразование строки в целое число
В заголовочных файлах <stcnib.h> и <cstcnib> содержатся полезные функции преобразования строк в числа (обратные преобразования можно сделать с помощью
функции sprintf):
int atoi (const char* p) преобразует переданную строку в int;
Функция преобразует строку, содержащую символьное представление целого числа, в соответствующее целое число. Признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу. Если преобразование не удалось, возвращает 0.
Аналогичные функции преобразования строки в длинное целое число (long) и в вещественное число с двойной точностью (double) называются atol и atof соответственно:
double atof(const char* p) преобразует переданную строку в double;
long atol (const char* p) преобразует переданную строку в long.
Пробелы и табуляции в начале строки пропускаются. Преобразование прекращается при встрече недопустимого символа или конца строки. Если строку нельзя преобразовать в число, возвращается 0. Если число выходит за пределы диапазона данного типа, переменной еrrno (заголовочный файл <сеrrnо>) присваивается
значение ERANGE и возвращается допустимое число.
Примеры:
Пример1 применения функций преобразования:
Пример 2 (программа заполняет массив типа double из строки):
#include <stdio.h>
#1nclude <str1ng.h>
#inc1ude <stdl1b.h>
int ma1n(){
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; к<i; k++) printf(“%5.2f ", m[k]);
return 0;
}
Библиотека предоставляет также различные функции для сравнения строк и подстрок, объединения строк, поиска в строке символа и подстроки и выделения из строки лексем.
Работа с символами
Для хранения отдельных символов используются переменные типа char. Их ввод-вывод также может выполняться как с помощью классов ввода-вывода, так и с помощью функций библиотеки.
При использовании классов ввод-вывод осуществляется как с помощью операций помещения в поток « и извлечения из потока », так и методов get() и get(char). Ниже приведен пример применения операций:
Вводимые символы могут разделяться или не разделяться пробельными символами, поэтому таким способом ввести символ пробела нельзя. Для ввода любого символа, включая пробельные, можно воспользоваться методами get() или get(c):
Метод get () возвращает код извлеченного из потока символа или EOF, а метод get (с) записывает извлеченный символ в переменную, переданную ему в качестве аргумента, а возвращает ссылку на поток.
В заголовочном файле <stdiо. h> определена функция getchart) для ввода символа со стандартного ввода, а также putchar() для вывода:
В библиотеке также определен целый ряд функций, проверяющих принадлежность символа какому-либо множеству, например множеству букв (isalfa), разделителей (isspace), знаков пунктуации (ispunct), цифр (isdigit) и т. д.
Некоторые функции содержащиеся в заголовочном файле <ctype.h>
isalnum
Проверяет, является ли символ буквой или цифрой
int isalnum(int ch);
Функция возвращает значение true, если символ ch является буквой или цифрой (A-Z, a-z, 0-9), или false в противном случае.
isalpha
Проверяет, является ли символ буквой
int isalpha(int ch);
Функция возвращает значение true, если символ ch является буквой (A-Z, a-z), или fаise в противном случае.
isdigit
Проверяет, является ли символ цифрой
int isdigit(int ch);
Функция выделяет младший байт параметра ch и возвращает значение true, если
символ ch является цифрой (0-9), или false в противном случае.
ispunct
Проверяет, является ли символ символом пунктуации
int ispunct(int ch);
Функция возвращает значение true, если символ ch является символом пунктуации (то есть печатаемым, но не буквой, не цифрой, не пробелом), или false в противном случае.
isspace
Проверяет, является ли символ разграничительным
int isspace(int ch);
Функция возвращает значение true, если символ ch является символом пробела или табуляцией, или символом новой строки, или символом новой страницы (символом перевода формата), или false в противном случае.
iscntrl
Проверяет, является ли символ управляющим.
int iscntrl(int ch);
Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является управляющим символом (типа line feed, del, табуляции и тому подобных, большинство из которых находятся в диапазоне 0x01-Ох1F (для кодировки ASCII)), или false в противном случае.
isgraph
Проверяет, является ли символ видимым.
int isgraph(int ch);
Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является видимым (то есть он не является символом пробела, табуляции и т. д.) или false в противном случае.
islower
Проверяет, является ли символ буквой нижнего регистра.
int islower(int ch);
Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой нижнего регистра, или false в противном случае.
isupper
Проверяет, является ли символ буквой верхнего регистра.
int isupper(int ch);
Функция выделяет младший байт параметра ch и возвращает значение true, если
символ ch является буквой верхнего регистра, или false в противном случае.
isprint
Проверяет, является ли символ печатаемым
int isprint(int ch):
Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является печатаемым (isgraph + пробел), или false в противном случае.
Перейдем теперь к рассмотрению задач.
Задача 1. Поиск подстроки
Дана строка символов. Написать программу, которая определяет, встречается ли в данной строке заданная последовательность символов. Длина строки текста не превышает 80 символов, текст не содержит переносов слов, последовательность не содержит пробельных символов.
При работе с масивами мы рассмотрели общий порядок действий при создании программы. Будем придерживаться его и впредь.