Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.03 Mб
Скачать

1.7.3 Библиотека cstring

Указатели находят широкое применение при обработке строк с завершающим нулём. Имеется стандартная библиотека cstring, содержащая множество функций обработки строк с завершающим нулём, которая основана на применении указателей. Рассмотрим основные возможности данной библиотеки, сгруппировав функции по выполняемым действиям. В описании функций s,s1 – строки в стиле С, n – целое число.

Длина строки – функция strlen(s). Не рекомендуем использовать эту функцию без крайней необходимости, поскольку для подсчёта длины строки требуется цикл прохода по строке до завершающего нуля – для длинных строк это может сказаться на эффективности программы.

Функции копирования и конкатенации

Обратим внимание, что привычные операции типа s1=s или s=s+s1 для целей копирования и конкатенации использовать нельзя, поскольку имена строк – указатели. Используются специальные функции:

strcpy(s1, s2) - копирует строку s2 в s1 (перезаписывает s1)

strncpy(s1, s2, n) - копирует не более чем n символов из s2 в s1

strcat(s1, s2) дописывает строку s2 в конец строки s1

strncat(s1, s2, n) дописывает строку s2 в конец строки s1, не более чем n символов

Отметим, что функция strcpy может использоваться и для удаления или вставки символов в строку. Например:

strcpy(s,s+1); - удалили первый символ из строки s

strcpy(s+1,s); - освободили место для вставки символа в начало строки.

Пользоваться этими возможностями следует с особой осторожностью – ведь мы обращаемся напрямую к памяти.

Функции сравнения строк

strcmp(s1, s) – сравнивает s1 с s.

Возвращает 0, -1 или 1, если s1 соответственно =s, <s, >s.

strncmp(s1, s2, n) – сравнивает до n символов s1 с s. Возвращает 0, -1, 1, если s1 соответственно =s, <s, >s.

Функции поиска в строках

strchr(s, c) – находит позицию первого вхождения символа c в строку s и возвращает указатель на эту позицию. Если символа нет в строке, возвращает NULL.

strstr(s1, s2) – находит позицию первого вхождения строки s2 в s1. Если такого фрагмента нет в строке, возвращает NULL.

Функция для разделения строки на слова (токены)

strtok(s,s1) Здесь s – исходная строка, а s1 – строка из символов, которые являются разделителями между словами (см. пример 1.11)

Примеры программ с использованием библиотеки cstring.

Представим ещё один вариант программы удаления пробелов из строки (примеры 1.7,1.8) с использованием функций strchr и strcpy. Обратите внимание, насколько сократился текст программы по сравнению с предыдущими вариантами. Программа не тратит дополнительную память на хранение промежуточной строки, правда, по своему быстродействию уступает предыдущим вариантам.

// Пример 1.10 – удаление пробелов из строки с использованием csting

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

char *n; char s[80];

cout<<”?”; cin.getline(s,80);

n=s;

while(n=strchr(n,’ ‘))

strcpy(n,n+1);

cout<<s<<endl; system(“pause”); return 0;

}

Приведём еще один короткий пример, демонстрирующий разделение строки на слова с помощью функции strtok, которая позволяет выделять слова с использованием любых разделителей (в примере разделитель пробел, но в strtok можно задать целую строку из разделителей, например, “ ,.!?”)

// Пример 1.11 – разделение строки на слова

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

char *p; char s[80];

cout<<”?”; cin.getline(s,80);

p = strtok(s, " "); // выделили первое слово

while (p)

{

cout << p<< endl; // выводим очередное слово

p = strtok(NULL, " "); // ищем следующее слово

}

system(“pause”);

return 0;

}

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