Работа со строками и файлами

Содержание

Слайд 2

Строки в Си

Строка – это массив символов, заканчивающийся символом конца строки ‘\0’

Язык

Строки в Си Строка – это массив символов, заканчивающийся символом конца строки
Си. Тема 8

Слайд 3

Разница в объявлении

Объявляем символьный массив

Язык Си. Тема 8

char test[] = "Hello!";

Объявляем указатель

const

Разница в объявлении Объявляем символьный массив Язык Си. Тема 8 char test[]
char *test = "Hello!";

test

test

A1

A1

Слайд 4

Разница в объявлении

Объявляем символьный массив

Язык Си. Тема 8

char test[] = "Hello!";
test[0] =

Разница в объявлении Объявляем символьный массив Язык Си. Тема 8 char test[]
'h';
test = "world";
puts(test);

Можно!!!

Нельзя!!!

hello!

Объявляем указатель

const char *test = "Hello!";
test = "world";
test[0] = ‘W';
puts(test);

Можно!!!

world

Нельзя!!!

Слайд 5

Функции для работы со строками в Си ()

Возвращает длину строки без учета

Функции для работы со строками в Си ( ) Возвращает длину строки
символа конца строки
int strlen(const char* s);
Добавляет строку source в конец строки dest (всю или n символов)
char * strcat(char * dest, const char * source);
char * strncat(char * dest, const char * source, int n);
Копирует строку source в строку dest (всю или n символов)
char * strcpy(char * dest, const char * source);
char * strncpy(char * dest, const char * source, int n);
Сравнивает строки (целиком или первые n символов)
int strcmp(const char * s1, const char * s2);
int strncmp(const char * s1, const char * s2, int n);
Ищет подстроку в строке
char * strstr(const char * s1, const char * s2);

Язык Си. Тема 8

Слайд 6

Определение длины строки

char *myString = "Hello, world!";
printf("%d\n", strlen(myString) );

Язык Си. Тема 8

13

Определение длины строки char *myString = "Hello, world!"; printf("%d\n", strlen(myString) ); Язык Си. Тема 8 13

Слайд 7

Сложение двух строк (конкатенация)

char destination[25]={0};
char *blank = " ", *c = "C++",

Сложение двух строк (конкатенация) char destination[25]={0}; char *blank = " ", *c
*vis = "Visual";
strcat(destination, vis);
strcat(destination, blank);
strcat(destination, c);
puts(destination);

Язык Си. Тема 8

Visual C++

Ответственность за то, что в массиве destination хватит памяти, лежит на программисте, вызывающем функцию strcat

Слайд 8

Добавление к строке указанного количества символов

char myString[80] = "This is the initial

Добавление к строке указанного количества символов char myString[80] = "This is the
string!";
char suffix[] = " extra text to add to the string...";
printf("Before: %s\n", myString);
strncat( myString, suffix, 19 );
printf("After: %s\n", myString);

Язык Си. Тема 8

Before: This is the initial string!
After: This is the initial string! extra text to add

Слайд 9

Копирование строки в строку

char destination[25];
char *blank = " ", *c = "C++",

Копирование строки в строку char destination[25]; char *blank = " ", *c
*vis = "Visual";
strcpy(destination,vis);
strcpy(destination,blank);
strcpy(destination,c);
puts(destination);

Язык Си. Тема 8

C++

Ответственность за то, что в массиве destination хватит памяти, лежит на программисте, вызывающем функцию strcpy

Слайд 10

Копирование части строки в строку

char destination[25];
char *blank = " ", *c =

Копирование части строки в строку char destination[25]; char *blank = " ",
"C++", *vis = "Visual";
strcpy(destination, vis);
strncpy(destination, c, 1);
puts(destination);

Язык Си. Тема 8

C

Слайд 11

Сравнение строк

Язык Си. Тема 8

char *buf1 = "aaa", *buf2 = "aaa";
if(buf1 ==

Сравнение строк Язык Си. Тема 8 char *buf1 = "aaa", *buf2 =
buf2)
puts("buf2 == buf1");
else
puts("buf2 != buf1");
buf2 = buf1;
if(buf1 == buf2)
puts("buf2 == buf1");
else
puts("buf2 != buf1");

buf2 != buf1

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

buf2 == buf1

Слайд 12

Сравнение строк

Функция strcmp сравнивает строки посимвольно
Символы хранятся в виде целых чисел. Одни

Сравнение строк Функция strcmp сравнивает строки посимвольно Символы хранятся в виде целых
их самых популярных кодировок – ASCII и EBCDIC
Код каждого символа одной строки сравнивается с кодом каждого символа другой строки
Латинские буквы упорядочены по алфавиту (к кириллице это не относится), поэтому имеет смысл сравнивать строки, состоящие их латинских букв
Цифры также упорядочены по возрастанию, от 0 до 9

Язык Си. Тема 8

Слайд 13

Сравнение строк

char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int ptr;
ptr

Сравнение строк char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
= strcmp(buf2, buf1);
if(ptr > 0)
puts("buf2 > buf1");
else
puts("buf2 <= buf1");
ptr = strcmp(buf2, buf3);
if(ptr > 0)
puts("buf2 > buf3");
else
puts("buf2 <= buf3");

Язык Си. Тема 8

strcmp возвращает 1, если первая строка больше второй,
-1, если первая строка меньше второй,
и 0, если строки эквивалентны

Слайд 14

Сравнение первых n символов

char *buf1 = "aaa", *buf2 = "bbb", *buf3 =

Сравнение первых n символов char *buf1 = "aaa", *buf2 = "bbb", *buf3
"ccc";
int ptr;
ptr = strncmp(buf2, buf1, 2);
if(ptr > 0)
puts("buf2 > buf1");
else
puts("buf2 <= buf1");
ptr = strncmp(buf2, buf3, 2);
if(ptr > 0)
puts("buf2 > buf3");
else
puts("buf2 <= buf3");

Язык Си. Тема 8

Слайд 15

Поиск подстроки в строке

char myString[]= "Visual C++";
char *c = "C++";
char *res =

Поиск подстроки в строке char myString[]= "Visual C++"; char *c = "C++";
0;
res = strstr(myString, c);
if(res)
printf("C++ found at %d position\n" , (res-myString+1) );

Язык Си. Тема 8

Функция strstr() ищет первое вхождение указанной подстроки в строке. Если вхождение найдено, то она возвращает указатель на первый символ найденной подстроки. Если вхождение найдено не было, то возвращается нулевой указатель

Слайд 16

Работа с файлами в Си ()

Открытие/закрытие файла
Чтение из файла
Запись в файл
Смещение

Работа с файлами в Си ( ) Открытие/закрытие файла Чтение из файла
внутри файла
Расстояние от начала файла до текущей позиции

Язык Си. Тема 8

FILE * fopen(char * filename, char * type);
void fclose(FILE* stream);

fscanf(поток, шаблон, адреса)
fgetc(поток)
fgets(адрес, размер, поток)

fprintf(поток, шаблон, данные)
fputc(символ, поток)
fputs(строка, поток)

int fseek(FILE * stream, long offset, int fromwhere);

unsigned long ftell(FILE* stream);

Слайд 17

Открытие файла

Строка type может принимать следующие значения:
r - открытие файла только

Открытие файла Строка type может принимать следующие значения: r - открытие файла
для чтения;
w - создание файла для записи;
а - присоединение; открытие для записи в конец файла или создание для записи, если файл не существует;
r+ - открытие существующего файла для обновления (чтения и записи);
w+ - создание нового файла для изменения;
a+ - открытие для присоединения; открытие (или создание, если файл не существует) для обновления в конец файла

Язык Си. Тема 8

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

Слайд 18

Режим открытия файла

Если данный файл открывается или создается в текстовом режиме, то

Режим открытия файла Если данный файл открывается или создается в текстовом режиме,
можно приписать символ t к значению параметра type (rt, w+t, и т.д.)
Для открытия в бинарном режиме можно к значению параметра type добавить символ b (wb, a+b, и т.д.)
Если в параметре type отсутствуют символы t или b, режим будет определяться глобальной переменной _fmode. Если переменная _fmode имеет значение O_BINARY, файлы будут открываться в бинарном режиме, иначе, если _fmode имеет значение O_TEXT, файлы открываются в текстовом режиме. Данные константы определены в файле fcntl.h

Язык Си. Тема 8

Слайд 19

Смещение внутри файла

Функция fseek() устанавливает адресный указатель файла, соответствующий потоку stream, в

Смещение внутри файла Функция fseek() устанавливает адресный указатель файла, соответствующий потоку stream,
новую позицию, которая расположена по смещению offset относительно места в файле, определяемого параметром fromwhere
Параметр fromwhere может иметь одно из трех значений 0, 1 или 2, которые представлены тремя символическими константами (определенными в файле stdio.h), следующим образом:

Язык Си. Тема 8

int fseek(FILE * stream, long offset, int fromwhere);

Слайд 20

Пример работы с файлом

FILE *stream;
char mstring[] = "Тестовый пример";
char msg[100];
// создать файл

Пример работы с файлом FILE *stream; char mstring[] = "Тестовый пример"; char
для его изменения
stream = fopen("proba.txt", "w+");
// записать в файл данные
fputs(mstring, stream);
// перейти в начало файла
fseek(stream, 0, SEEK_SET);
// вывести строку из файла
fgets(msg, 100, stream);
// напечатать строку
puts(msg);
fclose(stream);

Язык Си. Тема 8

Имя файла: Работа-со-строками-и-файлами.pptx
Количество просмотров: 28
Количество скачиваний: 0