Библиотека string.H
Для работы необходимо в начале программы подключить заголовочный файл:
#include <string.h>
string.h — заголовочный файл стандартной библиотеке языка Си, содержащий функции для работы с нуль-терминированной строками и различными функциями работы с памятью.
Функции объявленные в string.h широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Однако, существуют некоторые потенциальные проблемы с безопасностью, такие как переполнение буфера, что побуждает в пользу выбора более безопасных, возможно менее переносимых вариантов. Кроме этого, строковые функции работают только с набором символов ASCII или его совместимыми расширениями.
Большинство функций string.h не производят никакого выделения памяти и контроля границ; эта обязанность целиком ложится на плечи программиста.
memchr
memcmp
memcpy
memmove
memset
strcat
strchr
strcmp
strcoll
strcpy
strcspn
strerror
strlen
strncat
strncmp
strncpy
strpbrk
strrchr
strspn
strstr
strxfrm
Теперь чтоб создать строку достаточно написать:
string s;
Пример работы
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string name;
cout<<"Enter your name"<<endl;
cin>>name;
cout<<"Hi "<<name<<"!"<<endl;
return 0;
}
Библиотека предоставляет возможности копирования, сравнения, объединения строк, поиска подстроки, определения длины строки и т. д. (возможности библиотеки описаны в разделе «Функции работы со строками и символами», с. 91, и в приложении 6), а также содержит специальные функции ввода строк и отдельных символов с клавиатуры и из файла.
Пример. Программа запрашивает пароль не более трех раз
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
char s[80], passw[] = "kuku"; // passw - эталонный пароль
//Можно описать как *passw = "kuku";
int i, k = 0;
for (i = 0; !k && i<3; i++)
{
cout<<"\nVvedite parol'\n";
gets(s); // функция ввода строки (<stdio.h>)
if (strstr(s,passw))
// функция сравнения строк (<string.h>)
k = 1;
}
if (k) cout<<"\nPorol' prinyat";
else cout<<"\nPorol' ne prinyat";
return 0;
}
Рассмотрим процесс копирования строки src в строку dest. Очевидный алгоритм имеет вид:
char src[10], dest[10];
for (int i = 0; i<=strlen(src); i++) dest[i] = src[i];
Длина cтроки определяется с помощью функции strlen, которая вычисляет длину, выполняя поиск нуль-символа. Таким образом, строка фактически просматривается дважды. Более эффективным будет использовать проверку на нуль-символ непосредственно в программе.
Стандартные классы просто так
в состав С++ не добавляются,
Г. Шилдт
C++ не содержит стандартного типа данных «строка». Вместо этого он поддерживает массивы символов, завершаемые нуль-символом. Библиотека содержит функции для работы с такими массивами, унаследованные от С и описанные в заголовочном файле <string.h> (<cstring>). Они позволяют достичь высокой эффективности, но весьма неудобны и небезопасны в использовании, поскольку выход за границы строки не проверяется.
