Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Стандартные функции для обработки символьных строк

Макросы для обработки символов

 

Рассмотрим некоторые из макросов для преобразования символов, а также для проверки их вида. Для применения этих макросов необходима команда препроцессора

 

#include<ctype.h>

 

Все макросы имеют только один параметр типа int (или char, т.к. символ воспринимается как целое число) и порождают значение типа int. Пусть для определенности проверяется вид переменной символического типа

 

char ch;

 

Все макросы, проверяющие вид символа ch, будут порождать нуль, если этот символ не того вида, который ожидался, и не нуль, если ожидания оправдались.

  1. isdigit(ch) - порождает не нуль, если ch - цифра. Иначе - нуль.
  2. isalpha(ch) - порождает не нуль, если ch - буква. Иначе - нуль.
  3. isalnum(ch) - порождает не нуль, если ch - буква или цифра. Во всех остальных случаях - нуль.
  4. isspace(ch) - порождает не нуль, если ch - или пробел, или переход на новую строку, или вертикальная табуляция, или перевод формата. Иначе - нуль.
  5. iscntrl(ch) - порождает не нуль, если ch - управляющий символ (значения в коде ASCII от 0 до 037 (или 31 в десятичной системе)) или символ DEL. Во всех остальных случаях порождается нуль.
  6. ispunct(ch) - порождает не нуль, если ch - знак пунктуации. Иначе - нуль.
  7. islower(ch) - порождает не нуль, если ch - символ нижнего регистра.
  8. isupper(ch) - порождает не нуль, если ch - символ верхнего регистра.

 

Имеются также макросы для определения других видов символов.

 

Для преобразования символов имеются следующие макросы:

  1. toascii(int m) - переводит целое число m в соответствующий символ из таблицы ASCII. Например, toascii(49) = '1'; toascii(65)= 'A';
  2. Для перевода символа из нижнего регистра на верхний служит toupper(int m); Например, toupper('a') дает результат 'A';
  3. Для перевода из верхнего регистра на нижний используется 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 -адрес начала символьного массива. Разность между ними дает ответ на поставленный вопрос.

 

Пример использования функции сравнивания строк.

 

#include<stdio.h>#include<string.h> void main() {char *s1= "Stroka1";char *s2= "Stroka2";int n;n=strcmp(s1,s2);printf("n=%i\n",n); //n=0s2="Stroka2";n=strcmp(s1,s2);printf("n=%i\n", n); //n= -1s2= "Stroka 0";n=strcmp(s1.s2);printf("n=%i\n", n); //n=1 n=strncmp(s1,s2,4); //Сравнение первых 4 символовprintf("n=%i\n",n); //n=0 }

 

 

Пример копирования строк

 

#include<stdio.h>#include<string.h> void main() {char *s1= "Stroka1";char *s2= "Salaga";int n=4;puts(s1); // Выведет Stroka1 strcpy(s1,s2);puts(s1); // Выведет Salaga s1= "Stroka";strncpy(s1,s2,n); // Копирует первые 4 символа из s2 в s1, т.е. Sala puts(s1); // Выведет Salaka s1[n]= '\0'; // Признак конца строкиputs (s1); // Теперь выведет Sala }

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.