Копирование и конкатенация строк. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Копирование и конкатенация строк.



strcpy ( str1, str2 ) – копирует (побайтно) содержимое строки str 2 в строкуstr1. Массив str1должен быть достаточно большим, чтобы в него поместилась строка str2. Если места мало, то компилятор не выдаёт предупреждения или указания на ошибку, выполнение программы не прерывается, но это может привести к порче других данных или самой программы (т.е. неправильной работы программы в дальнейшем).

Синтаксис функции:

 

char* strcpy (char* str1, const char* str2)

str1, str2- указатели на строки.

Пример 12: копирование всей строки и её фрагмента. При копировании фрагмента производится коррекция значения указателя на строку.

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{

 char str1[20]="Проверка копирования";

 char str2[20];

 char str3[20];

 char* ptr=str1; // в str2 копируется часть строки str1

              // (идентификатор str1 является адресом)   

 ptr+=9;      // в ptr адрес символа, начиная с которого(9)  

 strcpy(str2,ptr); // производится копирование

 printf("\n %s",str2);

 strcpy(str3,str1);

 printf("\n %s",str3);

 getchar();

}

 

strncpy ( str1, str2,num ) – копирует num символов из строки str 2 в строкуstr1. Массив str1должен быть достаточно большим, чтобы в него поместилась строка str2. Если длина str1 меньше длины str2, то происходит урезание символов

Синтаксис функции:

 

char* strncpy (char* str1, const char* str2, size_t num)

str1, str2- указатели на строки;

num - количество копируемых символов (тип size_t-безнаковое число).

 

 char cLong[]=”012345678901234567890123456789”;

 char cShort[]=”abcdef”;

 strncpy(cLong, cShort,4);

 printf("\n %s", cLong);

 printf("\n %s", cShort);

 

В результате будет выведено:

012345678901234567890123456789

0123ef

 

strdup (S)- распределяет память, копирует в отведённую область строку, возвращает указатель на начало полученной строки-копии.

Синтаксис функции:

 

char* strdup (const char* source)

 

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

 char* str1="Процедура не найдена";

 char* str2;

 str2=strdup(str1);

 

Конкатенация (или присоединение) строк используется для образование новой строки символов.

strcat (str 1, str 2) – содержимое строки, на которую указывает str2, присоединяется к содержимое строки, на которую ссылается str1. Возвращаемый функцией указатель str1 указывает на результирующую строку. При этом величина строкового массива str1 должен быть достаточной для хранения объединённой строки. Синтаксис функции:

 

char* strcat (char* str1, const char* str2)

str1, str2- указатели на строки.

Пример 13: строка str инициализируется с помощью функции копирования strcpy и дополняется подстрокой, используя функцию strcat.

char str[81];

strcpy(str,”Для продолжения”);

strcat(str,”нажмите клавишу”);

 

В результате будет выведена строка:

”Для продолжения нажмите клавишу”

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

strlen (S)- определение длины строки.

Синтаксис функции:

 

size_t* strlen (const char* string)

 

В качестве единственного параметра функция принимает указатель на начало строки string, вычисляет количество символов строки и возвращает полученное безнаковое целое число (size_t). Функция sizeof() возвращает на единицу меньше, чем отводится под массив (нет '\0').

char Str[]=”ABCDEFGHIJK”;

unsigned int i;

i=strlen(Str);

 

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

strcmp (str 1, str 2) -посимвольное сравнение двух строк. Функция производит сравнение, различая прописные и строчные буквы. 

Синтаксис функции:

 

char* strcmp (const char* str1, const char* str2)

 

stricmp (str 1, str 2) -посимвольное сравнение двух строк. Функция производит сравнение, не различая прописные и строчные буквы. 

Синтаксис функции:

 

char* stricmp (const char* str1, const char* str2)

 

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

· <0, если строка str1 меньше, чем str2;

· =0, если строки эквивалентны;

· >0, если строка str1 больше, чем str2.

 

 

  Результат: i >0, т.к. прописные буквы имеют код символов меньше, чем те же символы в нижнем регистре

Пример 14:

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{

 char str1[]="Ошибка открытия базы";

 char str2[]="Ошибка открытия Базы";

 char str3[]="Sun";

 char str4[]="sUN";

 int i,j;

 i=strcmp(str1,str2);

 printf("\n 1 i=%d",i);

/*Результат: i>0, т.к. прописные буквы имеют код символов меньше, чем те же символы в нижнем регистре */

 j=stricmp(str3,str4); // только для латинского алфавита

 printf("\n 2 j=%d",j);

 getchar();

}

 

strncmp (str 1, str 2) -посимвольное сравнение определённого числа первых символов двух строк. Функция производит сравнение, различая прописные и строчные буквы. 

Синтаксис функции:

 

char* strncmp (const char* str1, const char* str2,size_t num)

 

strnicmp (str 1, str 2) -посимвольное сравнение двух строк. Функция производит сравнение, не различая прописные и строчные буквы. 

Синтаксис функции:

 

char* strnicmp (const char* str1, const char* str2,size_t num)

 

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

· <0, если строка str1 меньше, чем str2;

· =0, если строки эквивалентны;

· >0, если строка str1 больше, чем str2.

 

 

  Результат: i >0, т.к. прописные буквы имеют код символов меньше, чем те же символы в нижнем регистре

Пример 15:

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{

 char str1[]="Ошибка Открытия базы";

 char str2[]="Ошибка открытия Базы";

 char str3[]="Sun";

 char str4[]="sUN";

 int i,j;

 i=strcmp(str1,str2,12);

 printf("\n 1 i=%d",i);

/*Результат: i<0, т.к. прописные буквы имеют код символов меньше, чем те же символы в нижнем регистре */

 j=stricmp(str3,str4,2); // только для латинского алфавита

 printf("\n 2 j=%d",j); // результат =0

 getchar();

}

 

Поиск символов.

strnchr (str,’ c ’) –поиск символа с в строке string и в случае успешного поиска возвращает указатель на место первого вхождения символа в строку. Если указанный символ не найден, функция возвращает NULL. Поиск осуществляется с начала строки. 

Синтаксис функции:

 

char* strnchr (const char* string, int c)

char str []="абвгдеёжзийкл";

char* pStr;

pStr=strchr(str,’ж’);

 

В результате работы указатель pStr будет указывать на подстроку "жзийкл".

 

Функция strrchr осуществляет поиск заданного символа с конца строки, возвращает указатель на последний, совпадающий с заданным с с, символ в строке string.

char str []="абвгдеёжзийкл";

char* pStr;

pStr=strrchr(str,’и’);

Указатель pStr будет указывать на подстроку "ийкл".


Файлы.

Понятие файла.

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

1. файлы, в отличие от массивов, располагаются не в оперативной памяти, а на жёстких дисках или на внешних носителях, хотя файл может располагаться на так называемом электронном диске (в оперативной памяти);

2. файл не имеет фиксированной длины, т.е. может увеличиваться и уменьшаться;

3. перед работой с файлом его необходимо открыть, а после работы – закрыть.

 

Текстовые и бинарные файлы.

Различают два вида файлов: текстовые и бинарные.

Текстовые файлы могут быть просмотрены и отредактированы с клавиатуры любым текстовым редактором и имеют очень простую структуру: последовательность ASCII-символов. Эта последовательность символов разбивается на строки, каждая из которых заканчивается кодами 13, 10 (возврат каретки, перевод строки). Примеры известных текстовых файлов: *.bat, *.c, *.asm.

Бинарные файлы – это файлы, не имеющие структуры текстовых файлов. Каждая программа для своих бинарных файлов определяет собственную структуру.

 



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 117; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.202.54 (0.014 с.)