Лабораторная работа №6. Строки C++

Решения всех задач следует оформлять функциями в отдельном файле basicStrings.cpp. Функция main (файл main.cpp) должна демонстрировать вызов созданных функций. Для того, чтобы работать со строками, добавляем в файл инструкцию

#include <string>

Строка задается следующим образом

String s = "Hello!";
или вводится с клавиатуры
String s;
getline(cin, s);

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

За это занятие можно получить до трёх «сырых» баллов, по 0,4 балла за задачи 1–5 и 1 балл за задачу 6.

  1. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.

    Указание 1. Для символов в C++ можно использовать операции сравнения, например, c > 'a'.

    Указание 2.  Для обхода строки используем цикл вида

    for (auto x : s){
      /*работа с переменной x - элементом строки*/
    }
    
    или
    for (size_t i = 0; i < s.length(); i++){//s.length() - число элементов строки
         // Обработка элементов строки 
         // для доступа к элементу используем индекс: s[i]   
    }
    
  2. Дана строка. Проверить, совпадают ли её первый и последний символы.

  3. Даны строки S и S0. Найти количество вхождений строки S0 в строку S.

    Указание. В решении удобно воспользоваться функцией-членом find (const string& str, size_t pos = 0)  класса string, которая возвращает позицию вхождения типа size_t (беззнаковое целое) или значение string::npos в случае, если вхождение не найдено. (str - подстрока, pos - позиция, с которой начинается поиск). Также удобно пользоваться циклом типа while 

  4. Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вернуть строку S без изменений.

    Указание. Для поиска последнего вхождения подстроки можно воспользоваться функцией-членом rfind класса string, а для удаления — функцией-членом erase.

  5. Дана строка, содержащая по крайней мере один символ пробела. Вернуть подстроку, расположенную между первым и последним пробелом исходной строки. Если строка содержит только один пробел, то вернуть пустую строку.

    Указание. Для извлечения подстроки можно воспользоваться функцией-членом substr класса string.

  6. Дана строка, содержащая слова, знаки пунктуации и числа в десятичной системе счисления. Сформировать вектор строк, содержащий все строковые представления чисел из исходной строки в том же порядке. Например, результатом обработки строки "Закончился 2016 год и наступил новый 2017!" должен быть вектор {"2016","2017"}.

    Указание 1. В решении могут пригодиться функции-члены find_first_of и find_first_not_of класса string

    Указание 2. Этой функции следует передавать в качестве одного из параметров пустой вектор строк (по ссылке!). Для добавления нового элемента в конец вектора можно использовать функцию-член push_back класса vector. Для печати результирующего вектора можно воспользоваться функцией из лабораторных на работу с векторами.

Дополнительные задачи

  1. Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Найти длину самого длинного слова.

  2. Дана строка, состоящая из слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Сформировать вектор слов, содержащихся в этой строке.

  3. Дана строка, содержащая полное имя файла в операционной системе семейства Windows, т. е. имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой строки имя файла (без расширения).

  4. Дана строка, содержащая фрагмент кода на языке HTML. Вставить во все теги <p> атрибут class="par". Например, в результате обработки строки "Привет! <p>Это абзац.</p><p>А это второй.</p>" должна получиться строка "Привет! <p class="par">Это абзац.</p><p class="par">А это второй.</p>".