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

Строка – символьный массив, который заканчивается ‘\0’. В отличие от строки, буфер – это символьный массив, размер которого нужно задавать явно.



 

 

Строки в языке С.

 

Строка – символьный массив, который заканчивается ‘\0’. В отличие от строки, буфер – это символьный массив, размер которого нужно задавать явно.

 

Прототипы функций работы с буферами находятся в файле “mem.h”, со строками – в файле “string.h”

 

Дадим краткий обзор этих функций. Здесь str1, str2, buf1, buf2 – символьные массивы, n – целая переменная, sim – переменная типа char.

 

 

Функции работы со строками.

Функция

Синтаксис

Действия

Возвращаемое значение

1.

strcat

char *strcat (str1,str2)

Приклеивает строку str2 к str 1.

Указатель на str1

2.

strncat

char *strcnat (str1,str2,n)

Приклеивает n символов строки str2 к str 1.

Указатель на str1

3.

strchr

char *strchr (str1, sim)

Ищет символ sim в строке str1

Указатель на sim, если нашла.

NULL, если нет.

4.

strcmp

int strcmp (str1, str2)

Лексикографически сравнивает строки str1 и str2

<0, если str1<str2

=0, если str1=str2

>0, если str1>str2.

5.

strncmp

int strncmp (str1, str2, n)

Лексикографически сравнивает первые n символов строк str1 и str2

 

См. strcmp.

6.

stricmp

int stricmp (str1, str2)

Лексикографически сравнивает строки str1 и str2. Маленькие и большие буквы считаются одинаковыми.

 

См. strcmp

7.

strnicmp

int strnicmp (str1, str2, n)

Cравнивает первые n символов строк str1 и str2. Маленькие и большие буквы считаются одинаковыми.

 

См. strcmp

8.

strcpy

char *strcpy (str1, str 2)

Копирует строку str2 в str1.

Указатель на str1

9.

strncpy

char *strcnpy (str1,str 2,n)

Копирует n символов строки str2 в str1.

Указатель на str1

10.

strcspn

int strcspn (str1, str2)

Ищет в строке str1 первое вхождение символа из строки str2.

Количество символов из str1 до первого вхождения символа из str2

11.

strdup

char *strdup (str1)

Выделяет область памяти под строку. Копирует str1 в эту область.

Указатель на начало этой области.

12.

strset

char *strset (str1, sim)

Заполняем строку str1 символом sim.

Указатель на str1

13.

strnset

char *strnset (str1, sim, n)

Заполняем первые n элементов строки str1 символом sim.

Указатель на str1

14.

strlwr

char *strlwr (str1)

Преобразует str1 в прописные буквы

Указатель на str1

15.

strupr

char *strupr (str1)

Преобразует str1 в заглавные буквы

Указатель на str1

16.

strrev

char *strrev (str1)

Переворачивает строку str1 задом наперед.

Указатель на str1

17.

strstr

char *strstr (str1, str2)

Ищет подстроку str2 в строке str1.

Указатель на начало подстроки

18.

strlen

int strlen (str1)

Находит длину str1.

Длина str1.

 

Функции работы с буферами.

Функция

Синтаксис

Действия

Возвращаемое значение

19.

memchr

char *memchr (buf1, sim, n)

Ищет символ sim среди первых n символов buf1.



Указатель на sim, если нашла.

NULL, если нет.

20.

memcmp

int memcmp (buf1, buf2, n)

Лексикографически сравнивает первые n символов buf1 и buf2

<0, если buf1<buf2

=0, если buf1=buf2

>0, если buf1>buf2.

21.

memicmp

int memicmp (buf1, buf2, n)

Cравнивает первые n символов строк buf1 и buf2. Маленькие и большие буквы считаются одинаковыми.

 

См. memcmp

22.

memcpy

char *memcpy(buf1,buf2,n, sim)

Копирует из buf2 в buf1 до тех пор, пока не встретится символ sim или не скопируем n байтов.

Указатель на buf1

23.

memccpy

char *memcpy(buf1,buf2,n)

Копирует n символов из buf2 в buf1.

Указатель на buf1

24.

memset

char *memset (buf1, sim, n)

Заполняем первые n байт буфера buf1 символом sim.

Указатель на buf1

 

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

 

Определение класса символов.

Функция

Проверка на…

25.

isalpha

Букву

26.

isalnum

букву или цифру

27.

isascii

символ ASCII

28.

iscntrl

управляющий символ

29.

isdigit

десятичную цифру

30.

isxdigit

16-ричную цифру.

31.

isgraph

печатаемый символ (не пробел).

32.

isprint

печатаемый символ (в том числе и пробел).

33.

islower

прописную букву.

34.

isupper

заглавную букву.

35.

isspace

пробельный символ.

36.

ispunct

знак пунктуации.

 

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

 

Дано предложение. Напечатать все его слова, состоящие из трех слогов.

 

char str [100];

char *str1 =”аоуэыАОУЭЫ”;

 

int chisloSlogov(int nach, int con);

void pechatSlovo(int nach, int con);

 

main(){

int nachalo =0, dlina;

clrscr();

gets(str);

strcat(str,” “);

while(str [nachalo]!=’\0’){

dlina = strcspn(str+nachalo, “ ”);

if(chisloSlogov(nachalo, nachalo+dlina) == 3)

pechatSlovo(nachalo, nachalo+dlina);

nachalo=nachalo+dlina+1;

}

getch();

return(0);

}

 

int chisloSlogov(int nach, int con){

int sch=0;

for(int i=nach; i<=con;i++)

if(strchr(str1,str[i])!=NULL)

sch++;

return(sch);

}

 

void pechatSlovo(int nach, int con){

for(int i=nach; i<=con;i++)

printf(“%c”,str[i]);

}

 

 

Ввод – вывод.

 

Различают ввод – вывод верхнего уровня (с испоьзованием понятия “поток”) и ввод – вывод нижнего уровня (с использованием понятия “дескриптор”).

 

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

 

Запись.

Пишем в буфер, пока он не заполнится. Информация переписывается из буфера в файл или при заполнении всего буфера, или при закрытии файла.

 

Чтение.

Читаем из буфера. В буфер информация пишется при открытии файла и при заполнении буфера.

 

На верхнем уровне возможны форматный ввод – вывод (функции fprintf и fscanf).

 

Файл, открытый на верхнем уровне – последовательность считываемых или записываемых байтов (поток, stream). Когда поток открывается для ввода – вывода, с ним связывается указатель на структуру типа FILE, которая содержит разнообразную информацию о файле.

 

Далее функции работы с файлом используют не имя файла, а этот указатель.

 

В любой момент открыты 5 стандартных потоков:

 

 

stdin

Стандартный ввод

stdout

Стандартный вывод

stderr

Стандартный вывод ошибок

stdoux

Стандартный порт

stdprn

Стандартное устройство печати

 

Открытие файла для потокового ввода-вывода осуществляется с помощью функции fopen.

 

Синтаксис данной функции следующий:

 

FILE * fopen(char *name, char *type);

 

Функция открывает файл с именем name и возвращает указатель на структуру типа FILE, которая связана с нашим файлом. Все остальные функции ввода-вывода будут обращаться к файлу при помощи этого указателя.

 

Аргумент type показывает, для чего мы открываем файл. Он может принимать следующие значения:

 

“r”

Открыть для чтения (файл должен существовать).

“w”

Открыть для записи (Открывается пустой файл. Если файл с таким именем существовал, его содержимое теряется)

“a”

Открыть для добавления (Если файл не существует, он создается)

“r+”

Чтение + Запись (Файл должен существовать)

“w+”

Пустой файл для чтения и записи.

“a+”

Чтение и добавление.

 

Можно еще добавить t – текстовый файл или b – двоичный (объяснить разницу).

 

Лучше открывать файл с проверкой.

 

FILE *f;

if ((f=fopen(“mfile.c”,”rb+”))==NULL){

printf(“Не могу открыть файл”);

getch();

exit(1);

}

 

fclose (f) – закроет этот файл.

 

Место в файле, начиная с которого мы читаем или пишем, называется file pointer. Можно в разумных пределах перемещать file pointer по файлу.

 

Функция ftel(f) возвращает значение file pointer () в байтах.

Функция rewind(f) перемещает file pointer в начало файла.

Функция fseek(f,смещение, нач. значение) перемещает file pointer в нужное место файла.

 

Здесь смещение – это количество байтов, на которое мы хотим переместить file pointer (Может быть и отрицательным).

Нач. значение показывает, откуда мы отсчитываем смещение:

 

От начала файла

 

От текущего file pointer

 

От конца файла

 

Функция feof(f) проверяет, достигли ли мы конца файла.

 

Функции ввода – вывода высокого уровня:

 

Чтение

Запись

символа

fgetc

Из потока

fputc

В поток

fgetchar

Из stdin

fputchar

В stdout

getc

Из потока(макрос)

putc

В поток (макрос)

getchar

Из stdin (макрос)

putchar

В stdout (макрос)

getch

С консоли без эха

putch

На консоль

getche

С консоли с эхом

 

 

 

строки

fgets

Из потока

fputs

В поток

gets

Из stdin

puts

В stdout

cgets

С консоли

cputs

На консоль

 

Неформатированное чтение / запись

fread

 

fwrite

 

 

Форматированное чтение / запись

cscanf

С консоли

cprintf

На консоль

fscanf

Из потока

fprintf

В поток

scanf

Из stdin

printf

В stdout

sscanf

Из строки

sprintf

В строку

 

 

Привести примеры использования.

 


Дата добавления: 2015-09-29; просмотров: 23 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
 | 1.1. Поняття та значення строків (термінів) у цивільному праві

mybiblioteka.su - 2015-2024 год. (0.042 сек.)