Процедурное программирование на языке С. Часть 2. Указатели на объекты. Многоуровневая адресация: Методические указания к лабораторным работам по курсам «Алгоритмические языки и программирование» и «Процедурное программирование», страница 19

iscntrl() – проверка   на  управляющий символ;

islower() – проверка    на  строчные латинские буквы  (a-z);

ispunct() проверка    на  знаки  пунктуации;

isspace() проверка    на пробельные символы и т.д.

6.3. ФУНКЦИИ ФОРМАТНОГО ПРЕОБРАЗОВАНИЯ ДАННЫХ

Функции форматного преобразования данных из библиотеки <stdlib.h> полезны для преобразования цифр (чисел), записанных в строках. Например, для того, чтобы работать с цифрой, являющейся значением символьной переменной,  как с цифрой, а не как с кодом этой цифры, необходимо использовать функцию atoi().

Заголовок библиотечной функции atoi()int atoi (const char * ptr). Таким образом, аргументом этой функции может быть только адрес, возможно, константный.  В примере 6.4 функция atoi() преобразует символы "456" и "320" соответственно в числа 456 и 320.  Сумма этих чисел выводится на экран.

Пример 6.4 .

#include <stdio.h>

#include <stdlib.h>

void main (void)

  {  char str[] = "Summa 456 and 320";

     printf("\n Summa = %d",atoi(str+6)+atoi(str+14));

}

Замечание. Прежде, чем использовать в программе функцию atoi(), следует определить тот адрес, начиная с которого в строке записано число. Если в строке записано отрицательное число, то аргументом функции atoi()  может быть адрес знака ‘– ‘.

Кроме функции atoi(), преобразующей символы-цифры в целое число, к функциям форматного преобразования данных относятся функции atol(),atof(), itoa(), ltoa(), ultoa().

6.4. НЕКОТОРЫЕ  ФУНКЦИИ БИБЛИОТЕКИ STRING.H ДЛЯ РАБОТЫ СО СТРОКАМИ

Как правило, библиотечные функции, обрабатывающие строки в качестве аргументов получают адреса строк, с которыми следует выполнить заданные действия, а в точку вызова возвращается адрес строки-результата.

Функция strcpy() (ее заголовок функции   char * strcpy(char * str_1, constchar * str_2)) копирует байты, расположенные по адресу str_2 в область памяти, на которую указывает str_1. При этом вторым аргументом функции может быть строковый литерал, таким образом, по адресу str_1 создается строка. Например:

char st[7];    strcpy(st, “привет”);

В точку вызова функция возвращает значение переменной str_1, однако ее не обязательно вызывать в правой части оператора присваивания, т.к. после вызова значение ее первого параметра не меняется: меняется только содержимое участка памяти, адресуемого параметром str_1.

Если строки, расположенные по адресам str_1и str_2, перекрываются, то поведение функции не определено.

Для копирования перекрывающихся объектов (в частности, строк) следует использовать функцию memmove(), корректно работающую и в таких случаях. Заголовок функции memmove():   void * memmove (void * ptr_1, const void * ptr_2, size_t N). Функция копирует N символов из области памяти, на которую указывает ptr_2, в области памяти, адресуемую ptr_1. В точку вызова функция возвращает значение переменной ptr_1.

Функция strset() с заголовком char * strset(char *str, intsim), начиная с адреса str, несколько раз записывает символ sim. Количество символов  sim определяется местоположением нулевого символа в участке памяти, адресуемом str. Если символы записываются на место какой-либо строки, завершающейся нулевым символом, то длина этой строки совпадает с количеством записей символа sim. В остальных случаях функция делает произвольное количество записей, поэтому целесообразней использовать функцию strnset().

Перед вызовом рассмотренных функций должен быть выделен участок памяти, заполняемый строкой символов. Функция с заголовком char* strdup(constchar * str) копирует исходную строку с адресом str, одновременно выделяя память под копию. Адрес строки-копии – возвращаемое значение этой функции.

Для форматированного чтения из (записи в) строки полезны соответственно функции sscanf() и sprintf(). Эти библиотечные функции аналогичны функциям scanf() и printf() с той лишь разницей, что обрабатывают строку, в отличие от последних, работающих в потоками stdin и stdout. Поэтому в заголовках функций sscanf() и sprintf() присутствует дополнительный формальный параметр – указатель на строку, с которой будут осуществляться действия в соответствии с остальными параметрами.