Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Строки и символы (справка).doc
Скачиваний:
2
Добавлен:
20.08.2019
Размер:
202.75 Кб
Скачать

Преобразование строки в целое число

В заголовочных файлах <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 символов, текст не содержит переносов слов, последовательность не содер­жит пробельных символов.

При работе с масивами мы рассмотрели общий порядок действий при создании программы. Будем придерживаться его и впредь.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]