Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_po_OAiPR.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.23 Mб
Скачать

178) Поиск, удаление, замена и добавление символов в строке.

void *memcpy(void *dest, const void *src, size_t n); копирует n байт из области памяти src в dest, которые не должны пересекаться, в противном случае результат неопределен (возможно как правильное копирование, так и нет)

void *memmove(void *dest, const void *src, size_t n); копирует n байт из области памяти src в dest, которые в отличие от memcpy могут перекрываться

void *memchr(const void *s, char c, size_t n); возвращает указатель на первое вхождение c в первых n байтах s, или NULL, если не найдено

int memcmp(const void *s1, const void *s2, size_t n); сравнивает первые n символов в областях памяти

void *memset(void *, int z, size_t); заполняет область памяти одним байтом z

char *strcat(char *dest, const char *src); дописывает строку src в конец dest

char *strncat(char *dest, const char *, size_t); дописывает не более n начальных символов строки src (или всю src, если ее длина меньше) в конец dest

char *strchr(const char *, int); ищет символ в строке, начиная с головы и возвращает его адрес, или NULL если не найден

char *strrchr(const char *, int); ищет символ в строке, начиная с хвоста и возвращает его адрес, или NULL если не найден

Int strcmp(const char *, const char *); лексикографическое сравнение строк

Int strncmp(const char *, const char *, size_t); лексикографическое сравнение первых n байтов строк

Int strcoll(const char *, const char *); лексикографическое сравнение строк с учетом локали collating order

char *strcpy(char *toHere, const char *fromHere); копирует строку из одного места в другое

char *strncpy(char *toHere, const char *fromHere, size_t n); копирует до n байт строки из одного места в другое

char *strerror(int); возвращает строковое представление сообщения об ошибке errno (не потоко-безопасная)

size_t strlen(const char *); возвращает длину строки

size_t strspn(const char *s, const char *accept); определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, перечисленных в accept

size_t strcspn(const char *s, const char *reject); определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, не перечисленных в reject

char *strpbrk(const char *s, const char *accept); находит первое вхождение любого символа, перечисленного в accept

char *strstr(const char *haystack, const char *needle); находит первое вхождение строки needle в haystack

char *strtok(char *, const char *); преобразует строку в последовательность токенов. Не потоко-безопасная, нереентрантная.

size_t strxfrm(char *dest, const char *src, size_t n); создает оттранслированную копию строки, такую, что дословное сравнение ее (strcmp) будет эквивалентно сравнению с коллатором.

179) Строки в с++ позволяют нам работать с символьными данными. Благодаря ним мы можем читать с клавиатуры текст, как-то его обрабатывать и затем, например, снова его выводить в консоль.

В С++ существует 2 типа строк.

Первый из них - это массив переменных типа char.

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

Например:

char name[50];

cin>>name;

cout<<"Hello "<<name<<endl;

Второй из вариантов, более удобный - это специальный класс 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.append(переменная), так и s.append("строка");

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 в куда (там может быть как строка типа стринг, так и строка типа 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 местами.

s.size() - возвращает число элементов в строке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]