Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
30.05.2020
Размер:
428.13 Кб
Скачать

void scpy (char*, char*);

//prototype

 

int main()

 

 

{

 

 

char* str1 = " Press any key!";

 

 

char str2[80];

//copy str1 to str2

 

scpy (str2, str1);

 

cout << str2 << endl;

//display str2

 

_getch();

 

 

return 0;

 

 

}

 

//--------------------------------------------------------------

 

void scpy (char s[], char t[])

 

{

 

 

int i=0;

 

while ((s[i] = t[i]) !='\0')

 

}

i++;

 

 

 

или

void scpy (char *s, char *t)

{

while ((*s =*t) !='\0')

{s++; t++;}

}

или

void scpy (char *s, char *t)

{

while ((*s++ = *t++) !='\0');

}

или

void scpy (char *s, char *t) {}while (*s++ =*t++);

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

#include <string.h>

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

Функция size_t strlen (const char *str)

возвращает количество символов в строке str (длину строки), не включая 0-символ.

const int MAX = 80;

char s1[MAX] = "abcdef";

cout << strlen(s1) << endl; // 6

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

Функция char* strcpy (char *strDest, const char *source)

копирует все символы строки source, включая завершающий 0-символ, в строку strDest и возвращает указатель на ее начало. В строке strDest должно быть не менее strlen(source) + 1 байтов.

const int MAX =

80;

 

char s1[MAX]="abcdef", s2[MAX]="cd";

strcpy(s1, s2);

//cd

warning C4996 'strcpy' was declared deprecated

Функция errno_t

strcpy_s (char *strDest, size_t sizeInBytes_strDest, const char *strSource)

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

13

 

возвращает 0 при успешном завершении и код ошибки – в противном случае:

EINVAL (22) – Invalid argument или ERANGE ( ) – Result too large.

Функция strcpy_s копирует содержимое strSource, включая пустой символ завершения, в strDest. Строка должна быть достаточно большой для хранения исходной строки, включая завершающий нулевой символ. Поведение

strcpy_s не определено, если исходная и целевая строки накладываются. const int MAX = 80;

char

s1[MAX]="abcdef", s2[MAX]="cd";

strcpy_s(s1, MAX, s2);

//cd

cout

<< s1 << endl;

 

Шаблонная функция (только в С++) template <size_t size>

errno_t strcpy_s (char (&strDest)[size], const char *strSource);

позволяет вызывать функцию в привычном виде:

strcpy_s (s1,s2); //cd

Функция char* strncpy (char * strDest, const char * strSource, size_t count)

копирует не более count символов строки strSource, включая 0-символ, в строку strDest и возвращает указатель на начало строки strDest. Если 0-символ встретился в исходной строке strSource раньше, то копирование прекращается, а оставшиеся до count символы строки strDest заполняются 0-символами. В противном случае (если count меньше или равно длине строки strSource) 0-символ в strDest не добавляется.

const int MAX =

80;

 

 

char s1[MAX]="abcdef", s2[MAX]="cd";

strncpy(s1, s2, 1);

//cbcdef

warning C4996: 'strncpy' was declared deprecated

strncpy(s1, s2, 4);

//cd

warning C4996

char ss1[MAX]="cd",ss2[MAX]="abcdef" ;

strncpy(ss1, ss2, 1);

//ad

warning C4996: 'strncpy' was declared deprecated

strncpy(ss1, ss2, 4);

//abcd

warning C4996

strncpy(ss1, ss2, 6);

//abcdef warning C4996

Функция errno_t

strncpy_s(char *strDest, size_t sizeInBytes_strDest, const char *strSource, size_t count);

возвращает 0 при успешном завершении и код ошибки – в противном случае;

Функция пытается скопировать первые D символов strSource в strDest, где D является меньшим значением из количества элементов count и длины строки strSource. Если эти D символов вписываются в strDest (как sizeInBytes) и еще остается место для нулевого символа, то символы копируются, и добавляется завершающий нулевой символ, иначе strDest[0] устанавливается на нулевой символ и возвращается значение EINVAL (22) – Invalid argument.

const int MAX

= 80;

 

int count=

9;

 

 

char

s1[MAX]="abcdef", s2[MAX]="cdefghjklmn";

strncpy_s(s1,

MAX, s2, count);

//cdefghjkl

cout

<< s1

<<

endl;

Шаблонная функция (только в С++) template <size_t size>

errno_t strncpy_s (char (&strDest)[size], const char *strSource, size_t count);

позволяет вызывать функцию в привычном виде:

const int MAX = 80; int count=2;

char s1[MAX]="abcdef", s2[MAX]="cdefghj\0klmn"; strncpy_s(s1,s2,count);

cout << s1 << " " << count << endl; //cd

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

14

 

'strcat' was declared deprecated
//ab warning C4996:
//ab

Объединение строк

Функция char* strcat (char* strDest, const char* source)

добавляет копию строки source, включая 0-символ, в конец стр оки strDest. Начальный символ строки source записывается поверх 0-символа в конце строки strDest. Функция возвращает указатель на начало результирующей строки strDest, которая заканчивается 0-символом и должна иметь размер не менее strlen(strDest) + strlen(source) + 1 байтов.

const int MAX = 80; char s1[MAX] = "a";

char s2[MAX] = "b";

cout << strcat(s1,s2) << endl; cout << s1 << endl;

char* s;

cout << (s= strcat(s1, s2))<< endl;//abb warning C4996

Функция errno_t strcat_s (char *strDest, size_t sizeInBytes_strDest, const char *strSource);

возвращает 0 при успешном завершении и код ошибки – в противном случае.

Функция добавляет strSource к strDest и возвращает в результате строку с нулевым символом. 0-символ strSource заменяет 0-символ strDest. Поведение strcat_s не определено, если исходная и целевая строки накладываются.

код ошибки: EINVAL (22) – Invalid argument или ERANGE ( ) – Result too large.

char buf[16];

 

strcpy_s(buf, 16, "Start");

 

strcat_s(buf, 16, " End");

// Start End

cout << buf << endl;

const int MAX = 80;

 

char s1[MAX] = "a";

 

char s2[MAX] = "b";

 

strcat_s(s1, MAX, s2);

//ab

cout << s1<< endl;

Шаблонная функция (только в С++)

template <size_t size>

 

errno_t strcat_s(char (&strDes)[size],

const char *source );

позволяет вызывать функцию в привычном виде:

const int MAX = 80;

 

char s1[MAX]

=

"a";

 

char

s2[MAX]

=

"b";

 

strcat_s(s1,s2);

//ab

cout

<< s1 << endl;

Функция char* strncat (char* strDest, const char* source, size_t count)

позволяет добавить не более чем count символов строки source в конец строки strDest и возвращает указатель на strDest. В строке strDest должно быть не менее strlen(strDest) + strlen(source) + 1 байтов.

int count =2;

= 80;

 

const int MAX

 

char s1[MAX] = "aaa";

 

char s2[MAX] = "bb";

//warning C4996: 'strncat' was declared deprecated

strncat(s1,s2,count);

cout << s1 <<

endl;

//aaabb

char *s_res =

strncat(s1,s2,count);

cout << s_res

<< endl;

//aaabbbb

Функция errno_t strncat_s (char *strDest, size_t sizeInBytes_strDest, const char *strSource, size_t count)

возвращает 0 при успешном завершении и код ошибки – в противном случае.

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

15

 

Функция добавляет strSource к strDest и возвращает в результате строку с нулевым символом. Первоначальный 0- символ strSource перезаписывает завершающий 0-символ strDest. Поведение strcat_s не определено, если исходная и целевая строки накладываются.

код ошибки: EINVAL (22) – Invalid argument или ERANGE ( ) – Result too large.

const int MAX

= 80;

 

int count =2;

= "a";

 

char s1[MAX]

 

char s2[MAX]

= "bbb";

 

strncat_s(s1,

MAX, s2, count);

cout << s1<<

endl;

//abb

Шаблонная функция (только в С++) template <size_t size>

errno_t strncat_s (char (&strDest)[size], const char *source , size_t count);

позволяет вызывать функцию в привычном виде:

int count=2;

const int MAX = 80; char s1[MAX] = "aaa";

char s2[MAX] = "bbb"; strncat_s(s1,s2, count);

cout << s1 << endl; //aaabb

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

Функция int strcmp (char *s1, const char *s2)

сравнивает 2 строки в лексикографическом (т.е. упорядоченном по алфавиту) порядке с учетом различия прописных и строчных букв (рассматриваются первые символы, если они одинаковы, то рассматриваются вторые символы, третьи и т.д.). Функция возвращает 0, если строки равны; возвращает значение < 0, если первая строка меньше, чем вторая; и возвращает значение > 0, если первая строка больше, чем вторая.

cout << strcmp("abc", "ABC")<< endl; // возвращает 1 cout << strcmp("ABC", "ABC")<< endl; // возвращает 0 cout << strcmp("ABB", "ABC")<< endl; // возвращает -1

Функция int strncmp (char *s1, const char *s2, size_t n)

проводит сравнение только первых n символов двух строк: функция возвращает 0, если подстроки равны; возвращает значение < 0, если первая подстрока меньше, чем вторая; и возвращает значение > 0, если первая подстрока больше, чем вторая.

int count=2;

cout << strncmp("abc", "ABC", count)<< endl; // возвращает значение > 0 cout << strncmp("ABC", "abc", count)<< endl; // возвращает значение < 0 cout << strncmp("ABB", "ABC", count)<< endl; // возвращает 0

Функция int stricmp (char *s1, const char *s2)

позволяет сравнивать строки без учета регистра, т.е. без различия между прописными и строчными буквами. Она преобразует все буквы строк s1 и s2 в строчные буквы и сравнивает затем строки в лексикографическом порядке.

cout << stricmp("abc", "ABC")<< endl; // возвращает 0

// warning C4996: 'stricmp' was declared deprecated

cout << stricmp("ABC", "ABC")<< endl; // возвращает 0

//warning C4996

cout << stricmp("Ab", "ABC")<< endl; // возвращает значение < 0 // warning C4996

cout << stricmp("ABd", "abc")<< endl; // возвращает значение > 0 // warning C4996

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

16

 

Соседние файлы в папке Лабораторні роботи