Главная страница
Навигация по странице:

  • Теоретические сведения

  • Функция Прототип Краткое описание действий

  • Задания к лабораторной работе

  • Контрольные вопросы

  • Работа со строками и символами


    Скачать 42.31 Kb.
    НазваниеРабота со строками и символами
    АнкорTP_Laboratornaya_rabota11
    Дата04.05.2022
    Размер42.31 Kb.
    Формат файлаdocx
    Имя файлаTP_Laboratornaya_rabota11.docx
    ТипЛабораторная работа
    #512045

    Лабораторная работа 11

    Тема: Работа со строками и символами

    Цель работы: научиться использовать в программах функции для работы со строками в языке C++.
    Теоретические сведения.

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

    В программах, в зависимости от типа, вызовы функций для работы со строками задаются в виде:

    ИмяФ(СписокАргументов);

    или

    ИмяПерем=ИмяФ(СписокАргументов);

    где ИмяФ – имя функции; СписокАргументов – список аргументов, передаваемых в тело функции; ИмяПерем – идентификатор соответствующего типа.

    Например:

    y=strlen(st);

    /*переменной y присвоить значение длины строки st*/

    При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти.

    • Функции, работающие с регистрами, распространяются только на латиницу.

    • В С++ некоторые параметры функций обработки символов принадлежат типу int (unsigned), поэтому, если число станет больше 128 (255), функция будет работать некорректно.

    • Перед первым обращением к строке она должна быть объявлена и проинициализирована. Во многих случаях в качестве начального значения строки необходимо бывает задать пустую строку. Такую инициализацию можно выполнить с помощью вызова функции strcpy(s, "");, но более эффективным будет присваивание *s=0;. Кроме того пустую строку можно инициализировать char s[10]=""; или char s[10]="\0";, но при этом размер строки должен быть задан.

    • Функции копирования (кроме strncpy ) не проверяют длину строки. Размер строки-приемника должен быть больше, чем размер источника на 1 символ (для символа '\0' ).

    При вызове функции strncpy следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом '\0'. В этом случае такой символ надо дописывать в конец строки вручную.


    Функции для работы со строками – файл stdlib.h

    Функция

    Прототип

    Краткое описание действий

    atof

    double atof (const char *str);

    Преобразует строку str в вещественное число типа double

    atoi

    int atoi (const char *str);

    преобразует строку str в целое число типа int

    atol

    long atol (const char *str);

    преобразует строку str в целое число типа long

    itoa

    char *itoa (int v, char *str, int baz);

    преобразует целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). Для отрицательного числа и baz =10 первый символ "минус" (–).

    ltoa

    char *ltoa (long v, char *str, int baz);

    преобразует длинное целое v в строку str. При изображении числа используется основание baz (2<=baz<=36).

    ultoa

    char *ultoa (unsigned long v, char *str, int baz);

    преобразует беззнаковое длинное целое v в строку str

    Функции для работы со строками – файл string.h

    Функция

    Прототип

    Краткое описание действий

    strcat

    char *strcat (char *sp, const char *si);

    приписывает строку si к строке sp (конкатенация строк)

    strchr

    char *strchr (const char *str, int c);

    ищет в строке str первое вхождение символа с

    strcmp

    int strcmp (const char *str1, const char *str2);

    сравнивает строки str1 и str2. Результат отрицателен, если str1str2 (сравнение беззнаковое)

    strcpy

    char *strcpy (char *sp, const char *si);

    копирует байты строки si в строку sp

    strcspn

    int strcspn (const char *str1, const char *str2);

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

    strdup

    char *strdup (const char *str);

    выделяет память и переносит в нее копию строки str

    strlen

    unsigned strlen (const char *str);

    вычисляет длину строки str

    strlwr

    char *strlwr (char *str);

    преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра

    strncat

    char *strncat (char *sp, const char *si, int kol);

    приписывает kol символов строки si к строке sp (конкатенация)

    strncmp

    int strncmp (const char *str1, const char *str2, int kol);

    сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1str2

    strncpy

    char *strncpy (char *sp, const char *si, int kol);

    копирует kol символов строки si в строку sp ("хвост" отбрасывается или дополняется пробелами)

    strnicmp

    int strnicmp (char *str1, const char *str2, int kol);

    сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров (см. функцию strncmp )

    strnset

    char *strnset (char *str, int c, int kol);

    заменяет первые kol символов строки str символом c

    strpbrk

    char *strpbrk (const char *str1, const char *str2);

    ищет в строке str1 первое появление любого из множества символов, входящих в строку str2

    strrchr

    char *strrchr (const char *str, int c);

    ищет в строке str последнее вхождение символа с

    strset

    char *strset (char *str, int c);

    заполняет строку str заданным символом c

    strspn

    int strspn (const char *str1, const char *str2);

    определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2

    strstr

    char *strstr (const char *str1, const char *str2);

    ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2

    strtod

    double strtod (const char *str, char **endptr);

    преобразует символьную константу str в число двойной точности. Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str

    strtok

    char *strtok (char *str1, const char *str2);

    ищет в строке str1 лексемы, выделенные символами из второй строки

    strtol

    long strtol (const char *str, char **endptr, int baz);

    преобразует символьную константу str к значению "длинное число" с основанием baz (2<=baz<=36). Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str

    Strupr

    char *strupr (char *str);

    преобразует буквы нижнего регистра в строке str в буквы верхнего регистра

    Сравнение строк с помощью функции strcmp осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в таблице кодировки. Именно поэтому значения элементов в строках зависят от регистра.

    При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти.

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


    Задания к лабораторной работе.

    Выполните приведенные ниже задания.

    1. Удалить все гласные буквы из строки.

    2. Подсчитать количество слов в строке.

    3. Перевернуть каждое четное слово в строке.

    4. Удалить каждое четное слово из строки.

    5. Отсортировать слова в строке в лексикографическом порядке (по алфавиту).

    6. Удалить из строки все слова, начинающиеся на гласную букву.

    7. Удалить из строки все слова, заканчивающиеся на гласную букву.

    8. В исходном предложении перед каждым словом поставить знак ?.

    9. В заданном предложении найти самое короткое и самое длинное слово.

    10. В исходном предложении удалить все символы пробела. Вывести преобразованный текст и количество удаленных пробелов.



    Контрольные вопросы

    1. Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника превосходит допустимый размер строки-приемника?

    2. Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника меньше размера строки-приемника?

    3. Почему при сравнении строк важен регистр символов?

    4. Как сравниваются строки разной длины?

    5. Какие возможны последствия при обращении к неинициализированной строке?


    написать администратору сайта