Стандартные функции для обработки символьных строк
Макросы для обработки символов
Рассмотрим некоторые из макросов для преобразования символов, а также для проверки их вида. Для применения этих макросов необходима команда препроцессора
#include<ctype.h>
Все макросы имеют только один параметр типа int (или char, т.к. символ воспринимается как целое число) и порождают значение типа int. Пусть для определенности проверяется вид переменной символического типа
char ch;
Все макросы, проверяющие вид символа ch, будут порождать нуль, если этот символ не того вида, который ожидался, и не нуль, если ожидания оправдались.
isdigit(ch) - порождает не нуль, если ch - цифра. Иначе - нуль.
isalpha(ch) - порождает не нуль, если ch - буква. Иначе - нуль.
isalnum(ch) - порождает не нуль, если ch - буква или цифра. Во всех остальных случаях - нуль.
isspace(ch) - порождает не нуль, если ch - или пробел, или переход на новую строку, или вертикальная табуляция, или перевод формата. Иначе - нуль.
iscntrl(ch) - порождает не нуль, если ch - управляющий символ (значения в коде ASCII от 0 до 037 (или 31 в десятичной системе)) или символ DEL. Во всех остальных случаях порождается нуль.
ispunct(ch) - порождает не нуль, если ch - знак пунктуации. Иначе - нуль.
islower(ch) - порождает не нуль, если ch - символ нижнего регистра.
isupper(ch) - порождает не нуль, если ch - символ верхнего регистра.
Имеются также макросы для определения других видов символов.
Для преобразования символов имеются следующие макросы:
toascii(int m) - переводит целое число m в соответствующий символ из таблицы ASCII. Например, toascii(49) = '1'; toascii(65)= 'A';
Для перевода символа из нижнего регистра на верхний служит toupper(int m); Например, toupper('a') дает результат 'A';
Для перевода из верхнего регистра на нижний используется tolower(int m)
Например, tolower('A') дает результат 'a'.
Рассмотрим пример. Пусть вводится с клавиатуры последовательность букв, цифр, знаков пунктуации и других символов. Нужно подсчитать по отдельности, сколько букв, цифр и знаков пунктуации в строке длиной 100 символов.
#include<stdio.h>#include<ctype.h>#define N 100 void main() {int n_digit=0, n_alfa=0, n_punct=0, i;char ch;for (i=0; i<N; i++) { printf("Введите %i-й символ \n", i+1); fflush(stdin);scanf("%c",&ch); if(isdigit(ch)) n_digit++; else if(isalpha(ch)) n_alpha++; elseif(ispunct(ch)) n_punct++;elseprintf("%c не цифра, не буква и не знак пунктуации \n", ch); }printf("n_digit=%i n_alpha=%i n_punct=%i\n", n_digit, n_alpha, n_punct); }
Стандартные функции для обработки символьных строк
Прототипы этих функций находятся в файле string.h. Поэтому для их использования необходима директория препроцессора
#include<string.h>
1)
Функция для объединения символьных строк. Ее прототип имеет вид: 2)
char *strcat(char *s1, char *s2);
За строкой s1 размещает строку s2.
Например, есть две строки символов
char *s1= "Ракетный";
char *s2= " двигатель";
Вызов функции strcat(s1, s2) приведет к появлению строки "Ракетный двигатель"
3)
char *strncat(char *s1, char *s2, int n);
Например, strncat(s1, s2, 5);
За строкой s1 будет размещено 5 первых символов из строки s2.
4)
Функция копирования строк.
char *strcpy(char *s1, char *s2);
Возвращает указатель на первый символ строки, полученной в результате копирования символов строки s2 в s1 до первого символа '\0'.
Например, strcpy(s1, s2). Строка s2 копируется в s1.
5)
char *strncpy(char *s1, char *s2, int n);
Первые n символов из строки s2 копируются в строку s1.
6)
Функция определения длины строки
int strlen(char *s);
Пример, int m;
char *s= "Колобок";
m=strlen(s);
6)
Функция сравнения символьных строк
int strcmp(char *s1, char *s2);
Сравнивает две строки. Если они совпадают, то функция возвращает нуль. Если строка s1<s2, то возвращается отрицательное целое число.
В случае s1>s2 возвращаемое число больше нуля.
Сравнение осуществляется по кодам в таблице ASCII.
7)
int strncmp(char *s1, char *s2, int n);
Сравниваются первые n символов строк s1 и s2.
8)
Функция определения места первого вхождения заданного символа в строку.
char *strchr(char *s, char c);
Если заданный символ отсутствует, то возвращается нуль. Пример. В строке символов "wertical" определить, на каком месте находится символ 'c'.
#include<stdio.h>#include<string.h> void main() { char *s="wertical"; char *ptr; ptr=strchr(s, 'c');printf("Позиция символа c в строке =%i\n", ptr-s); }
Здесь в ptr заносится адрес, где находится символ 'c'. Напомним, что s -адрес начала символьного массива. Разность между ними дает ответ на поставленный вопрос.