Строки в C++
Строка - последовательность (массив) символов. Если в выражении встречается одиночный символ, он должен быть заключен в одинарные кавычки
. При использовании в выражениях строка заключается в двойные кавычки.
Признаком конца строки является нулевой символ \0
. В C++ строки можно описать с помощью символов (массив элементов типа char
), в котором следует предусмотреть место для хранения признака конца строки.
Например, описание строки из 25 символов должно выглядеть так:
Можно описать и массив строк:
Определен массив из 3 строк по 25 байт в каждой.
Для работы с указателями можно использовать (char *
). Адрес первого символа будет начальным значением указателя.
Рассмотрим пример объявления и вывода строк.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include «stdafx.h»
#include
using
namespace
std;
int
main()
{
setlocale(LC_ALL,«Rus»
)
;
//описываем 3 строки, s3- указатель
char
s2[
20
]
, *
s3, s4[
30
]
;
cout
<<
«s2=»
;
cin
>>
s2;
//ввод строки s2
cout
<<
«s2=»
<<
s2<<
endl;
//запись в s3 адреса строки, где хранится s4. Теперь в переменных
//(указателях) s3 и s4 хранится значение одного и того же адреса
s3=
s4;
cout
<<
«s3=»
;
cin
>>
s3;
//ввод строки s3
//вывод на экран строк s3 и s4, хотя в результате присваивния s3=s4;
//теперь s3 и s4 — это одно и тоже
cout
<<
«s3=»
<<
s3<<
endl;
cout
<<
«s4=»
<<
s4<<
endl;
system
(«pause»
)
;
return
0
;
}
|
Результат работы программы:
Но следует отметить, что если пользователь введет в одну переменную слова разделенные пробелом, то программа будет работать иначе:
Все дело в том, что функция cin
вводит строки до встретившегося пробела. Более универсальной функцией является getline
.
cin.getline(char *s, int n);
Предназначена для ввода с клавиатуры строки s
с пробелами, в строке не должно быть более n
символов. Следовательно, для корректного ввода строк, содержащих пробел, необходимо в нашей программе заменить cin>>s
на cin.getline(s, 80)
.
Операции над строками
Строку можно обрабатывать как массив символов, используя алгоритмы обработки массивов или с помощью специальных функций обработки строк, некоторые из которых приведены ниже. Для работы с этими строками необходимо подключить библиотеку cstring
.
Для преобразования числа в строку можно воспользоваться функцией sprintf
из библиотеки stdio.h
.
Некоторые функции работы со строками:
Прототип функции
|
Описание функции
|
size_t strlen(const char *s)
|
вычисляет длину строки s в байтах.
|
char *strcat(char *dest, const char *scr)
|
присоединяет строку src в конец строки dest, полученная срока возвращается в качестве результата
|
char *strcpy(char *dest, const char *scr)
|
копирует строку scr в место памяти, на которое указывает dest
|
char strncat(char *dest, const char *dest, size_t maxlen)
|
присоединяет строку maxlen символов строки src в конец строки dest
|
char *strncpy(char *dest, const char *scr, size_t maxlen)
|
копирует maxlen символов строки src в место памяти, на которое указывает dest
|
int ctrcmp(const char *s1, const char *s2)
|
сравнивает две строки в лексикографическом порядке с учетом различия прописных и строчных букв, функция возвращает 0, если строки совпадают, возвращает - 1, если s1 располагается в упорядоченном по алфавиту порядке раньше, чем s2, и 1 - в противоположном случае.
|
int strncmp(const char *s1, const char *s2, size_t maxlen)
|
сравнивает maxlen символов двух строк в лексикографическом порядке, функция возвращает 0, если строки совпадают, возвращает - 1, если s1 располагается в упорядоченном по алфавиту порядке раньше, чем s2, и 1 - в противоположном случае.
|
double atof(const char *s)
|
преобразует строку в вещественное число, в случае неудачного преобразования возвращается число 0
|
long atol(const char *s)
|
преобразует строку в длинное целое число, в случае неудачного преобразования возвращается 0
|
char *strchr(const char *s, int c);
|
возвращает указатель на первое вхождение символа c
в строку, на которую указывает s
. Если символ c
не найден, возвращается NULL
|
char *strupr(char *s)
|
преобразует символы строки, на которую указывает s, в символы верхнего регистра, после чего возвращает ее
|
Тип данных string
Кроме работы со строками, как с массивом символов, в C++ существует специальный тип данных string
. Для ввода переменных этого типа можно использовать cin
, или специальную функцию getline
.
getline(cin, s);
Здесь s
- имя вводимой переменной типа string
.
При описании переменной этого типа можно сразу присвоить значение этой переменной.
string var(s);
Здесь var
- имя переменной, s
- строковая константа. В результате этого оператора создается переменная var
типа string
, и в нее записывается значение строковой константы s
. Например,
string v(«Hello»);
Создается строка v
, в которую записывается значение Hello
.
Доступ к i-му
элементу строки s
типа string
осуществляется стандартным образом s[i]
. Над строками типа string
определенны следующие операции:
- присваивания, например s1=s2;
- объединения строк (s1+=s2 или s1=s1+s2) - добавляет к строке s1 строку s2, результат храниться в строке s1, пример объединения строк:
- сравнения строк на основе лексикографического порядка: s1=s2, s1!=s2, s1s2, s1<=s2, s1>=s2 - результатом будет логическое значение;
При обработке строк типа string
можно использовать следующие функции:
- s.substr(pos, length)
- возвращает подстроку из строки s
, начиная с номера pos
длинной length
символов;
- s.empty()
- возвращает значение true, если строка s
пуста, false - в противном случае;
- s.insert(pos, s1)
- вставляет строку s1
в строку s
, начиная с позиции pos
;
- s.remove(pos, length)
- удаляет из строки s
подстроку length
длинной pos
символов;
- s.find(s1, pos)
- возвращает номер первого вхождения строки s1
в строку s
, поиск начинается с номера pos
, параметр pos
может отсутствовать, в этом случае поиск идет с начала строки;
- s.findfirst(s1, pos)
- возвращает номер первого вхождения любого символа из строки s1
в строку s
, поиск начинается с номера pos
, который может отсутствовать.
Русский язык для строк
Думаю вы уже заметили, что при выводе русских букв, в консоли появляются «левые» символы. Для того чтобы избежать этого недоразумения, необходимо воспользоваться сторонней функцией CharToOemA
. Подключаем библиотеку windows.h
, она нужна для того, чтобы наша функция могла преобразовать строки в другую кодировку. Также, нам понадобиться дополнительный символьный массив. Исходный код программы будет выглядеть вот так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include «stdafx.h»
#include
#include
using
namespace
std;
int
main()
{
setlocale(LC_ALL,«Rus»
)
;
char
s[
255
]
=
{
» Меня надо преобразовать «
}
;
char
*
pre=
new
char
[
255
]
;
CharToOemA(s, pre)
;
//преобразовываем
cout
<<
s;
delete
pre;
system
(«pause>>void»
)
;
return
0
;
}
|
Способ только что описанный достаточно не удобен. Но существует более простой вариант решения «русской» проблемы. Как видите, в программе используется функция setlocale(), вместо этого удобнее вписать в главную функцию следующую конструкцию.
Работа со строками. Класс string
. Конструкторы класса. Функции assign()
, append()
, insert()
, replace()
, erase()
, find()
, rfind()
, compare()
, c_str()
. Примеры
1. Какое назначение класса string
в программах на C++?
Класс string
предназначен для работы со строками типа char*
, которые представляют собой строку с завершающим нулем. Класс string
был введенн как альтернативный вариант для работы со строками типа char*
. Строки, которые завершаются символом ‘\0’
еще называются C-строками. Поскольку, string
есть классом, то можно объявлять объекты этого класса.
2. Какие модули (библиотеки) нужно подключить, чтобы использовать возможности класса string
в MS Visual Studio C++?
Чтобы использовать возможности класса string
в MS Visual Studio (C++), нужно подключить библиотеку
и пространство имен std
.
#include
using namespace
std;
3. Каким образом осуществляется объявление переменной типа string
? Примеры
Объявление переменной типа string
осуществляется точно так же как и обычной переменной. Возможный вариант объявления с одновременной инициализацией.
// тип string
string s1; // переменная с именем s1 типа string
string s2 = "This is a string variable"
; // объявление с инициализацией
// использование переменной типа string с оператором присваивания
s1 = s2; // s1 = "This is a string variable"
s2 = "New text"
;
4. Какие преимущества и недостатки дает использование класса string
в сравнении с типом char*
?
Создание нового типа string
было обусловлено недостатками работы с строками символов, который демонстрировал тип char*
. В сравнении с типом char*
тип string
имеет следующие основные преимущества:
- возможность обработки строк стандартными операторами C++ (=
, +
, = =
, <>
и т.п.). Как известно, при использовании типа char*
даже наиболее простые операции со строками выглядели сложно и требовали написания чрезмерного программного кода;
- обеспечение лучшей надежности (безопасности) программного кода. Например, при копировании строк, тип string
обеспечивает соответствующие действия, которые могут возникнуть в случае, если строка-источник имеет больший размер чем строка-приемник;
- обеспечение строки, как самостоятельного типа данных. Объявление типа string
как строки есть единым для всех переменных в программе, которая обеспечивает непротиворечивость данных.
Основным недостатком типа string
в сравнении с типом char*
, есть замедленная скорость обработки данных. Это связано с тем, что тип string
– это, фактически, контейнерный класс. А работа с классом требует дополнительной реализации программного кода, который, в свою очередь занимает лишнее время.
5. Какие операторы можно использовать с объектами класса string
?
Класс string
есть удобен тем, что позволяет удобно манипулировать строками, используя стандартные (перегруженные) операторы.
С объектами класса string
можно использовать нижеследующие операторы
- =
– присваивание
- +
– конкатенация (объединение строк)
- +=
– присваивание с конкатенацией
- ==
– равенство
- !=
– неравенство
- <
– меньше
- <=
– меньше или равно
- >
– больше
- >=
– больше или равно
-
– индексация
Пример,
который демонстрирует использование вышеприведенных операторов
// тип string, операции над строками
string s1 = "s-1"
;
string s2 = "s-2"
;
string s3;
bool
b;
// операция "=" (присваивание строк)
s3 = s1; // s3 = "s-1"
// операция "+" - конкатенация строк
s3 = s3 + s2; // s3 = "s-1s-2"
// операция "+=" - присваивание с конкатенацией
s3 = "s-3"
;
s3 += "abc"
; // s3 = "s-3abc"
// операция "==" - сравнение строк
b = s2==s1; // b = false
b = s2=="s-2"
; // b = true
// операция "!=" - сравнение строк (не равно)
s1 = "s1"
;
s2 = "s2"
;
b = s1 != s2; // b = true
// операции "<" и ">" - сравнение строк
s1 = "abcd"
;
s2 = "de
";
b = s1 > s2; // b = false
b = s1 < s2; // b = true
// операции "<=" и ">=" - сравнение строк (меньше или равно, больше или равно)
s1 = "abcd"
;
s2 = "ab"
;
b = s1 >= s2; // b = true
b = s1 <= s2; // b = false
b = s2 >= "ab"
; // b = true
// операция - индексация
char
c;
s1 = "abcd"
;
c = s1; // c = "c"
c = s1; // c = "a"
6. Содержит ли класс string
конструкторы?
Как и любой класс, класс string
имеет ряд конструкторов. Основные из них следующие: String();
string(const char
* str);
string(const
string & str);
7. Примеры инициализации с помощью конструкторов
Ниже приведены примеры инициализации переменных типа string
String s1("Hello!"
);
string s2 = "Hello!"
; // инициализация - конструктор string(const char * str)
char * ps = "Hello"
;
string s3(ps); // инициализация
string s4(s3); // инициализация - конструктор string(const string & str)
string s5; // инициализация - конструктор string()
8. Присваивание строк. Функция assign()
. Примеры
Чтобы присвоить одну строку другой, можно применить один из двух методов:
- использовать оператор присваивания ‘=’
;
- использовать функцию assign()
из класса string
.
Функция assign()
имеет несколько перегруженных реализаций.
Первый вариант – это вызов функции без параметров String &assign(void
);
В этом случае происходит простое присваивание одной строки другой.
Второй вариант позволяет копировать заданное количество символов из строки: String &assign(const
string & s, size_type st, size_type num);
- s
– объект, из которого берется исходная строка;
- st
– индекс (позиция) в строке, из которой начинается копирование num
символов;
- num
– количество символов, которые нужно скопировать из позиции st
;
- size_type
– порядковый тип данных.
Третий вариант функции assign()
копирует в вызывающий объект первые num символов строки s
: String & assign(const char
* s, size_type num);
- s
– строка, которая завершается символом ‘\0’
;
- num
– количество символов, которые копируются в вызывающий объект. Копируются первые num
символов из строки s
.
Ниже приведен пример с разными реализациями функции assign()
.
Пример.
// присваивание строк, функция assign()
string s1 = "сайт"
;
string s2;
string s3;
char
* ps = "сайт"
;
s3 = s1; // s3 = "сайт"
s2.assign(s1); // s2 = "сайт"
s2.assign(s1, 0, 4); // s2 = "best"
s2.assign(ps, 8); // s2 = "bestprog"
9. Объединение строк. Функция append()
. Пример
Для объединения строк используется функция append()
. Для добавления строк также можно использовать операцию ‘+’
, например: String s1;
string s2;
s1 = "abc"
;
s2 = "def"
;
s1 = s1 + s2; // s1 = "abcdef"
Однако, функция append()
хорошо подходит, если нужно добавлять часть строки.
Функция имеет следующие варианты реализации: String &append(const
string & s, size_type start);
string &append(const char
* s, size_type num);
В первом варианте реализации функция получает ссылку на строчный объект s
, который добавляется к вызывающему объекту. Во втором варианте реализации функция получает указатель на строку типа const char *
, которая завершается символом ‘\0’
.
Пример.
Демонстрация работы функции append()
. String s1 = "abcdef"
;
s2 = "1234567890"
;
append(s2, 3, 4); // s1 = "abcdef4567"
char
* ps = "1234567890"
;
s1 = "abcdef"
;
s1.append(ps, 3); // s1 = "abcdef123"
10. Вставка символов в строке. Функция insert()
. Пример
Чтобы вставить одну строку в заданную позицию другой строки нужно использовать функцию insert()
, которая имеет несколько вариантов реализации.
Первый вариант функции позволяет вставить полностью всю строку s
в заданную позицию start
вызывающей строки (вызывающего объекта): String & insert(size_type start, const
string &s);
Второй вариант функции позволяет вставить часть (параметры insStart
, num
) строки s
в заданную позицию start
вызывающей строки: String & insert(size_type start, const
string &s, size_type insStart, size_type num);
В вышеприведенных функциях:
- s
– строка, которая вставляется в вызывающую строку;
- start
– позиция в вызывающей строке, из которой осуществляется вставка строки s
;
- insStart
– позиция в строке s
, из которой происходит вставка;
- num
– количество символов в строке s
, которые вставляются с позиции insStart
.
string s1 = "abcdef"
;
string s2 = "1234567890"
;
s1.insert(3, s2); // s1 = "abc"+"1234567890"+"def"="abc1234567890def"
s2.insert(2, s1, 1, 3); // s2 = "12bcd34567890"
11. Замена символов в строке. Функция replace()
. Пример
Функция replace()
выполняет замену символов в вызывающей строке. Функция имеет следующие варианты реализации: String &replace(size_type start, size_type num, const
string &s);
string &replace(size_type start, size_type num, const
string &s, size_type replStart, size_type replNum);
В первом варианте реализации вызывающая строка заменяется строкой s
. Есть возможность задать позицию (start
) и количество символов (num
) в вызывающей строке, которые нужно заменить строкой s
.
Второй вариант функции replace()
отличается от первого тем, что позволяет заменять вызывающую строку только частью строки s
. В этом случае задаются два дополнительных параметра: позиция replStart
и количество символов в строке s
, которые образуют подстроку, которая заменяет вызывающую строку.
Пример.
Демонстрация работы функции replace()
. String s1 = "abcdef"
;
string s2 = "1234567890"
;
s2.replace(2, 4, s1); // s2 = "12abcdef7890"
s2 = "1234567890"
;
s2.replace(3, 2, s1); // s2 = "123abcdef67890"
s2 = "1234567890"
;
s2.replace(5, 1, s1); // s2 = "12345abcdef7890"
// замена символов, функция replace()
string s1 = "abcdef"
;
string s2 = "1234567890"
;
s2.replace(2, 4, s1); // s2 = "12abcdef7890"
s2 = "1234567890"
;
s2.replace(3, 2, s1); // s2 = "123abcdef67890"
s2 = "1234567890"
;
s2.replace(5, 1, s1); // s2 = "12345abcdef7890"
s2 = "1234567890"
;
s2.replace(5, 1, s1, 2, 3); // s2 = "12345cde7890"
s2 = "1234567890"
;
s2.replace(4, 2, s1, 0, 4); // s2 = "1234abcd7890"
12. Удаление заданного количества символов из строки. Функция erase()
. Пример
Для удаления символов из вызывающей строки используется функция erase()
: String & erase(size_type index=0, size_type num = npos);
- index
– индекс (позиция), начиная из которой нужно удалить символы в вызывающей строке;
- num
– количество символов, которые удаляются.
Пример.
String s = "01234567890"
;
s.erase(3, 5); // s = "012890"
s = "01234567890"
;
s.erase(); // s = ""
13. Поиск символа в строке. Функции find()
и rfind()
. Примеры
В классе string
поиск строки в подстроке можно делать двумя способами, которые отличаются направлением поиска:
- путем просмотра строки от начала до конца с помощью функции find()
;
- путем просмотра строки от конца к началу функцией rfind()
.
Прототип функции find()
имеет вид: Size_type find(const
string &s, size_type start = 0) const
;
- s
– подстрока, которая ищется в строке, что вызывает данную функцию. Функция осуществляет поиск первого вхождения строки s
. Если подстрока s
найдена в строке, что вызвала данную функцию, тогда возвращается позиция первого вхождения. В противном случае возвращается -1;
Прототип функции rfind()
имеет вид: Size_type rfind(const
string &s, size_type start = npos) const
;
- s
– подстрока, которая ищется в вызывающей строке. Поиск подстроки в строке осуществляется от конца к началу. Если подстрока s
найдена в вызывающей строке, то функция возвращает позицию первого вхождения. В противном случае функция возвращает -1;
- npos
– позиция последнего символа вызывающей строки;
- start
– позиция, из которой осуществляется поиск.
Пример 1.
Фрагмент кода, который демонстрирует результат работы функции find()
// тип string, функция find()
string s1 = "01234567890"
;
string s2 = "345"
;
string s3 = "abcd"
;
int
pos;
pos = s1.find(s2); // pos = 3
pos = s1.find(s2, 1); // pos = 3
pos = s1.find("jklmn"
, 0); // pos = -1
pos = s1.find(s3); // pos = -1
pos = s2.find(s1); // pos = -1
Пример 2.
Демонстрация работы функции rfind()
.
// тип string, функции find() и rfind()
string s1 = "01234567890"
;
string s2 = "345"
;
string s3 = "abcd"
;
string s4 = "abcd---abcd"
;
int pos;
pos = s1.rfind(s2); // pos = 3
pos = s1.rfind(s2, 12); // pos = 3
pos = s1.rfind(s2, 3); // pos = 3
pos = s1.rfind(s2, 2); // pos = -1
pos = s2.rfind(s1); // pos = -1
pos = s1.rfind(s3, 0); // pos = -1
// разница между функциями find() и rfind()
pos = s4.rfind(s3); // pos = 7
pos = s4.find(s3); // pos = 0
14. Сравнение частей строк. Функция compare()
. Пример
Поскольку тип string
есть классом, то, чтобы сравнить две строки между собой можно использовать операцию ‘= =’
. Если две строки одинаковы, то результат сравнения будет true
. В противном случае, результат сравнения будет false
.
Но если нужно сравнить часть одной строки с другой, то для этого предусмотрена функция compare()
.
Прототип функции compare()
:
int
compare(size_type start, size_type num, const string &s) const
;
- s
– строка, которая сравнивается с вызывающей строкой;
- start
– позиция (индекс) в строке s
, из которой начинается просмотр символов строки для сравнения;
- num
– количество символов в строке s
, которые сравниваются с вызывающей строкой.
Функция работает следующим образом. Если вызывающая строка меньше строки s
, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s
, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Пример
. Демонстрация работы функции compare()
:
// тип string, функция compare()
string s1 = "012345"
;
string s2 = "0123456789"
;
int
res;
res = s1.compare(s2); // res = -1
res = s1.compare("33333"
); // res = -1
res = s1.compare("012345"
); // res = 0
res = s1.compare("345"
); // res = -1
res = s1.compare(0, 5, s2); // res = -1
res = s2.compare(0, 5, s1); // res = -1
res = s1.compare(0, 5, "012345"
); // res = -1
res = s2.compare(s1); // res = 1
res = s2.compare("456"
); // res = -1
res = s2.compare("000000"
); // res = 1
15. Получение строки с символом конца строки ‘\0’
(char *
). Функция c_str()
. Пример
Чтобы получить строку, которая заканчивается символом ‘\0’
используется функция c_str()
.
Прототип функции:
const char
* c_str() const
;
Функция объявлена с модификатором const
. Это означает, что функция не может изменять вызывающий объект (строку).
Пример 1
. Преобразование типа string
в const char *
.
// тип string, функция c_str()
string s = "abcdef"
;
const char
* ps;
ps = s.c_str(); // ps = "abcdef"
Пример 2.
Ниже продемонстрирован перевод строки из string
в тип System::String
для отображения его в элементе управления типа Label
Библиотека функций языков С и C++ включает богатый набор функций обработки строк и символов. Строковые функции работают с символьными массивами, завершающимися нулевыми символами. В языке С для использования строковых функций необходимо включить в начало модуля программы заголовочный файл , а для символьных - заголовочный файл . В языке C++ для работы со строковыми и символьными функциями используются заголовки и соответственно. В этой главе для простоты изложения используются имена С-заголовков.
Поскольку в языках С и C++ при выполнении операций с массивами не предусмотрен автоматический контроль нарушения их границ, вся ответственность за переполнение массивов ложится на плечи программиста. Пренебрежение этими тонкостями может привести программу к аварийному отказу.
В языках С и C++ печатаемыми являются символы, отображаемые на терминале. В ASCII-средах они расположены между пробелом(0x20) и тильдой(OxFE). Управляющие символы имеют значения, лежащие в диапазоне между нулем и Ox1F; к ним также относится символ DEL(Ox7F).
Исторически сложилось так, что аргументами символьных функций являются целые значения, из которых используется только младший байт. Символьные функции автоматически преобразуют свои аргументы в тип unsigned char. Безусловно, вы вольны вызывать эти функции с символьными аргументами, поскольку символы автоматически возводятся в ранг целых в момент вызова функции.
В заголовке определен тип size_t, который является результатом применения оператора sizeof и представляет собой разновидность целого без знака.
В версии С99 к некоторым параметрам нескольких функций, первоначально определенных в версии С89, добавлен квалификатор restrict. При рассмотрении каждой такой функции будет приведен ее прототип, используемый в среде С89(а также в среде C++), а параметры с атрибутом restrict будут отмечены в описании этой функции.
Список функций
Проверка на принадлежность
isalnum - Проверка на принадлежность символа к алфавитно-цифровым isalpha - Проверка на принадлежность символа к буквам isblank - Проверка пустого символа iscntrl - Проверка на принадлежность символа к управляющим isdigit - Проверка на принадлежность символа к цифровым isgraph - Проверка на принадлежность символа к печатным но не к пробелу islower - Проверка на принадлежность символа к строчным isprint - Проверка на принадлежность символа к печатным ispunct - Проверка на принадлежность символа к знакам пунктуации isspace - Проверка на принадлежность символа к пробельным isupper - Проверка на принадлежность символа к прописным isxdigit - Проверка на принадлежность символа к шестнадцатеричным
Работа с символьными массивами
memchr - Просматривает массив чтобы отыскать первое вхождение символа memcmp - Сравнивает определённое количество символов в двух массивах memcpy - Копирует символы из одного массива в другой memmove - Копирует символы из одного массива в другой с учётом перекрытия массивов memset - Заполняет определённое количество символов массива заданным
Манипуляции над строками
strcat - Присоединяет копию одной строки к заданной strchr - Возвращает указатель на первое вхождение младшего байта заданного параметра strcmp - Сравнивает в лексикографическом порядке две строки strcoll - Сравнивает одну строку с другой в соответствии с параметром setlocale strcpy - Копирует содержимое одной строки в другую strcspn - Возвращает строку в которой отсутствуют заданные символы strerror - Возвращает указатель на строку содержащую системное сообщение об ошибке strlen - Возвращает длину строки с завершающим нулевым символом
|