Стандартные функции для работы со строками.




Специальный класс string.

 

Массив переменных типа char.

Строкой называется массив символов, который заканчивается пустым символом ‘\0’. Переменная типа char хранит в себе 1 символ. Размер строки равняется размеру массива - 1, т.к. последний элемент содержит NULL (пустая переменная), который обозначает символ конца строки.

Строка объявляется как обычный символьный массив, например,

char s1[10]; // строка длиной в девять символов

или: char *s2; // указатель на строку

Различие между указателями s1 и s2 заключается в том, что указатель s1 является именованной константой, а указатель s2 – переменной.

Пример: char name[50];

cin>>name; cout<<"Hello "<<name<<endl;

Строковые константы заключаются в двойные кавычки в отличие от символов, которые заключаются в одинарные кавычки. Например, “This is a string.”

При инициализации строк размерность массива лучше не указывать, это выполнит компилятор, подсчитав длину строки и добавив к ней единицу. Например, char s1[ ] = “This is a string.”;

Для работы со строками существует большое количество функций, прототипы которых описаны в заголовочных файлах stdlib.h и string.h.

Стандартные функции для работы со строками.

Функции для работы со строками, прототипы которых описаны в заголовочном файле string.h.

1. Сравнение строк. Для сравнения строк используются функции strcmp и strncmp.

Функция int strcmp (const char *str1, const char *str2);

сравнивает строки str1, str2 и возвращает –1, 0 или 1, если строка str1 соответственно меньше, равна или больше строки str2.

Функция int strncmp (const char *str1, const char *str2, size_t n);

сравнивает не более чем n первых символов из строк str1 и str2. Функция возвращает –1, 0 или 1, если первые n символов из строки str1 соответственно меньше, равны или больше первых n символов из строки str2.

 

 

 

2. Копирование строк. Для копирования строк используются функции strcpy и strncpy.

Функция char *strcpy (char *str1, const char *str2);

копирует строку str2 в строку str1. Строка str2 копируется полностью, включая завершающий нулевой байт. Функция возвращает указатель на str1. Если строки перекрываются, то результат непредсказуем.

Функция char *strncpy (char *str1, const char *str2, size_t n);

копирует n символов из строки str2 в строку str1. Если строка str2 содержит меньше чем n символов, то последний нулевой байт копируется столько раз, сколько нужно для расширения строки str2 до n символов. Функция возвращает указатель на строку str1.

 

 

3. Соединение строк. Для соединения строк в одну строку используются функции strcat и strncat.

Функция char* strcat (char *str1, const char *str2);

присоединяет строку str2 к строке str1, причем завершающий нулевой байт строки str1 стирается. Функция возвращает указатель на строку str1.

Функция char* strncat (char *str1, const char *str2, size_t n);

присоединяет n символов из строки str2 к строке str1, причем завершающий нулевой байт строки str1 стирается. Функция возвращает указатель на строку str1. если длина строки str2 меньше n, то присоединяются только символы, входящие в строку str2. После соединения строк к строке str1 всегда добавляется нулевой байт. Функция возвращает указатель на строку str1.

 

4. Поиск символа в строке. Для поиска символа в строке используются функции strchr, strrchr, strspn, strcspn и strpbrk.

Функция char* strchr (const char *str, int c);

ищет первое вхождение символа, заданного параметром c, в строку str. В случае успеха функция возвращает указатель на первый найденный символ, а в случае неудачи – NULL.

Функция char* strrchr (const char *str, int c);

ищет последнее вхождение символа, заданного параметром c, в строку str. В случае успеха функция возвращает указатель на последний найденный символ, а в случае неудачи – NULL.

 

 

Функция size_t strspn (const char *str1, const char *str2);

возвращает индекс первого символа из строки str1, который не входит в строку str2.

Функция size_t strcspn (const char *str1, const char *str2);

возвращает индекс первого символа из строки str1, который входит в строку str2.

 

 

Функция char* strpbrk (const char *str1, const char *str2);

находит первый символ в строке str1, который равен одному из символов в строке str2. В случае успеха функция возвращает указатель на этот символ, а в случае неудачи – NULL.

 

5. Сравнение строк. Для сравнения строк используются функция strstr.

Функция char* strstr (const char *str1, const char *str2);

находит первое вхождение строки str2 (без конечного нулевого байта) в строку str1. В случае успеха функция возвращает указатель на найденную подстроку, а в случае неудачи – NULL. Если указатель str1 указывает на строку нулевой длины, то функция возвращает указатель str1.

 

6. Разбор строки на лексемы. Для разбора строки на лексемы используется функция strtok.

Функция char* strtok (char *str1, const char *str2);

возвращает указатель на следующую лексему (слово) в строке str1, в которой разделителями лексем являются символы из строки str2. В случае если лексемы закончились, то функция возвращает NULL. При первом вызове функции strtok параметр str1 должен указывать на строку, которая разбирается на лексемы, а при последующих вызовах этот параметр должен быть установлен в NULL.

7. Определение длины строки. Для определения длины строки используется функция strlen.

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

возвращает длину строки, не учитывая последний нулевой байт. Например,

char str[] = "123";

printf ("len = %d\n", strlen (str)); // печатает: len = 3

2) Класс string. Для его работы необходимо подключить заголовочный файл string: #include <string>

В отличие от типа char, string является классом. Классы содержат в себе: переменные, константы и функции.

Для создания строки необходимо в начале программы написать using namespace std;

Создание строки: string s;

Запись в строку: s="Hello";

Пример работы с классом string: string name;

cout<<"Enter your name"<<endl; cin>>name; cout<<"Hi "<<s<<"!"<<endl;

При работе со строками не надо задавать ее размер.

Основные функции для работы со строками:

  • s.append(str) - добавляет в конец строки строку str
  • s.assign(str) - присваивает строке s значение строки str. Аналогично записи s=str;
  • int i=s.begin() - записывает в i индекс первого элемента строки
  • int i=s.end() - аналогично, но последнего элемента строки
  • s.clear() - отчищает строку, т.е. удаляет все элементы в ней
  • s.compare(str) - сравнивает строку s со строкой str и возвращает 0 в случае совпадение
  • s.copy (куда, сколько, начиная с какого) - копирует из строки s в куда (может быть строка типа string типа char). Последние 2 параметра не обязательные (можно использовать функцию с 1,2 или 3 параметрами)
  • bool b=s.empty() - если строка пуста, возвращает true, иначе false
  • s.erase(откуда, сколько)- удаляет n элементов с заданной позиции
  • s.find(str,позиция) - ищет строку str начиная с заданной позиции
  • s.insert(позиция,str, начиная, beg, count) - вставляет в строку s с заданной позиции часть строки str с позиции beg и вставляя count символов
  • int len=s.length() - записывает в len длинну строки
  • s.push_back(symbol) - добавляет в конец строки символ
  • s.replace(index, n,str) - берет n первых символов из str и заменяет символы строки s на них, начиная с позиции index
  • str=s.substr(n,m) - возвращает m символов начиная с позиции n
  • s.swap(str) - меняет содержимое s и str местами.

Примеры. Постарайтесь понять, что делает каждый пример:

Практика.

Задачи для строк типа char:

  1. Ввести строку S и подстроку S1. Если подстрока S1есть в введенной строке S, вывести “YES”, иначе “NO”.
  2. Ввести 3 строки: S1, S2, S3. Заменить в строке S3 строку S1 на строку S2.

Задачи для строк типа string:

  1. Ввести текст S и вводят подстроку S1, найти количество вхождений подстроки S1в тексте S.
  2. Вводят текст S и два слова S1 и S2, заменить все слова S1 на слова S2.
  3. Вводят 2 текста S1 и S2. Сравнить их, объединить, вывести все пробелы, точки, запятые, двоеточия. Вывести размер каждого текста и общий размер. Поменять все буквы «з» на «z» и «и» на «i», вывести количество замен.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: