Материал: Laboratornaya_Rabota_3_условие

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

ЛАБОРАТОРНАЯ РАБОТА № 3

СТРОКИ И СТРУКТУРЫ

1. Работа со строками

Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ – это символ с кодом, равным 0, что записывается в виде управ­ляющей последовательности ‘\0’. По положению нуль-символа определяется фактическая длина строки.

char str[10] = “My text”;

В этом примере под строку выделяется 10 байт, 7 из которых занято под символы строки, а восьмой – под нуль-символ. Если строка при определении инициализируется, ее размерность можно опускать (компилятор сам выделит соответствующее количество байт):

char str[] = “Program”; // выделено и заполнено 8 байт

Пример использования массивов.

Пример. Пользователь вводит строку размером до 30 символов и еще один отдельный символ. Подсчитать, сколько раз этот символ встречается в строке, введенной пользователем.

Программа на C++

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_ALL, "Russian");

char str[30]; // Строка, задаваемая пользователем

char s; // Символ, задаваемый пользователем

cout << "Введите строку" << endl;

cin.getline(str,30); // Ввод строки

cout << "Введите символ" << endl;

cin >> s; // Ввод символа

int k = 0; // Инициализация счетчика

// количества символов s в строке str

// Цикл подсчета количества символов s в строке str

for (int i = 0; i < strlen(str); i++)

if (str[i] == s)

k++;

// Вывод результата на экран

cout << "Количество вхождений символа " << s << " в строку \n" << str << "\n равно " << k << endl;

system("pause");

В табл. 1 приведены основные функции для работы со строками. Функция gets находится в модуле stdio.h, остальные в модуле – string.

Таблица 1

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

Функция

Назначение

gets_s(str)

Считывает строку, введенную пользователем с клавиатуры и записывает ее в переменную str.

strcat_s(s1, s2)

Функция добавляет строку s2 к s1 и возвращает s1.

strcpy_s(s1, s2)

Функция копирует строку s2 в s1 и возвращает s1.

strcmp(s1,s2)

Сравнивает строки s1 и s2. Функция возвращает положительное (если s1 больше s2), нулевое (если s1 равно s2) или отрицательное (если s1 меньше s2). Строки считаются равными, когда они полностью совпадают по составу символов. Строка считается больше другой, если в ней раньше встречается символ с кодом больше. Если одна строка полностью совпадает с началом другой, то большей считается более длинная строка.

strlen(s)

Функция возвращает длину строки s (при этом символ конца строки не учитывается).

strncat_s(s1, s2, n)

Функция добавляет не более n символов из строки s2 к s1 и возвращает s1.

strncpy_s(s1, s2, n)

Функция копирует не более n символов из строки s2 в s1 и возвращает s1.

strpbrk(s1, s2)

Функция ищет символ одной строки в другой. Функция возвращает указатель на символ, являющийся первым вхождением любого из символов из s2 в строку s1, если его нет, возвращается NULL (пустое значение указателя).

strrchr(s, ch)

функция ищет символ в строке. Функция возвращает указатель на первое вхождение символа ch в строку s, если его нет - возвращает NULL.

strstr(s1, s2)

Функция ищет первое вхождение подстроки s2 в строке s1. Функция возвращает указатель на элемент из s1, с которого начинается s2 или NULL в случае неудачи

isalnum(c)

возвращает значение true, если с является буквой или цифрой, и false в других случаях

isalpha(c)

возвращает значение true, если с является буквой,  и false в других случаях

isdigit(c)

возвращает значение true, если с является цифрой, и false в других случаях

islower(c)

возвращает значение true, если с является буквой нижнего регистра, и false в других случаях

isupper(c)

возвращает значение true, если с является буквой верхнего регистра, и false в других случаях

isspace(c)

возвращает значение true, если с является пробелом, и false в других случаях

toupper(c)

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

strchr(s,c)

поиск первого вхождения символа с в строке s. В случае удачного поиска возвращает указатель на место первого вхождения символа с. Если символ не найден, то возвращается ноль.

strcspn(s1,s2)

определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2

strspn(s1,s2)

возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2

strprbk(s1,s2)

Возвращает указатель  первого вхождения любого символа строки s2 в строке s1

atof(s1)

преобразует строку s1 в тип double

atoi(s1)

преобразует строку s1 в тип int

atol(s1)

преобразует строку s1 в тип long int

2. Задание № 1

Составить программу для работы со строками.

1. В текстовой строке проверить, какая буква встречается чаще – 'a', 'b' или ‘c’. В качестве результата вывести соответствующее текстовое сообщение.

2. В текстовой строке проверить правильность расстановки круглых скобок (т.е. соответствует ли количество открывающих скобок количеству закрывающих).

3. В текстовой строке подсчитать число вхождений тройки символов 'abc'.

4. В текстовой строке определить количество слов, начинающихся с буквы 'a'.

5. В текстовой строке определить количество слов, заканчивающихся буквой 'w'.

6. В текстовой строке определить количество слов, начинающихся и заканчивающихся одной и той же буквой.

7. В текстовой строке определить количество слов, в которых есть хотя бы одна буква 'd'.

8. В текстовой строке определить количество слов, в которых содержится ровно три буквы ‘e’.

9. В текстовой строке найти самое длинное слово и вывести его на экран вместе с его длиной.

10. В текстовой строке заменить все пробелы знаком '_'.

11. В текстовой строке поменять все символы '!' на '?'.

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

13. На основе текстовой строки, введенной пользователем, создать новую строку, в которой все пары символов 'ph' будут заменены на символ 'f'.

14. На основе текстовой строки, введенной пользователем, создать новую, из которой будут удалены все знаки ‘-’ и ‘+’.

15. В текстовой строке найти количество символов арифметических операций (т.е. знаков ‘+’, ‘-‘, ‘/’ и ‘*’).

16. На основе текстовой строки, введенной пользователем, создать новую строку, где каждый третий символ заменен знаком ‘#’.

17. Подсчитать, сколько раз пара 'th' входит в заданный текст.

18. В текстовой строке найти самое короткое слово и вывести его на экран вместе с его длиной.

19. В строке заданы фамилия, имя и отчество студента (именно в таком порядке). Напечатайте его фамилию и инициалы.

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

21. Напишите программу, которая позволяет ввести строку и вывести ее, сокращая каждый раз на один символ до тех пор, пока в строке не останется один символ.

22. Дана текстовая строка. Определить является ли она положительным или отрицательным целым числом.

23. В текстовой строке найти количество точек и запятых.

24. В текстовой строке определить количество слов, в которых содержатся буквы ‘x’ и ‘y’ (и та, и другая вместе).

25. Дана текстовая строка. Найти в ней количество цифр ‘1’, ‘2’ и ‘3’.

26. Дана текстовая строка. Найти в ней количество слов, длина которых равна 5 символам.

27. В текстовой строке заменить все символы ‘@’ на ‘#’.

28. Дана текстовая строка. Найти в ней количество нулей.

3. Класс string

Тип данных string требует подключения к программе заголовочного файла <string>. Основные действия с подобными строками выполняются с помощью стандартных операций и методов, а длина строки изменяется динамически в соответствии с потребностями.

Простейший пример использования.

#include <iostream>

#include <string>

using namespace std;

int main()

{

string s1, s2, s3, s4;

s1 = "new string";

cout << "Enter string " << endl;

getline(cin,s2);

cout << s2 << endl;

s3 = s1;

if (s3 > s2) cout << s3 << endl;

s4 = s1 + s2;

cout << s4 << endl;

system("pause");

}

Таблица 2

Основные метоы для работы со строками класса string

Функция

Назначение

s.append(str)

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

s.assign(str)

присваивает строке s значение строки str

s.clear()

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

s.compare(str)

 

сравнивает строку s со строкой str и возвращает 0 в случае совпадения

s.copy(C, I, N)

 

копирует из строки s в строку C(может быть как строка типа string, так и строка типа char) I символов, начиная с N-го символа

bool b = s.empty()

если строка пуста, возвращает true, иначе false

s.erase(I,N)

удаляет N элементов с I-го символа

s.find(str,I)

ищет строку str начиная с I- го символа

s.insert(pos, s1)

вставляет строку s1 в строку s, начиная с позиции pos

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()

возвращает число элементов в строке.

Чтобы обращаться к отдельным символам строки типа string, можно воспользоваться операцией взятия индекса ([]), или при помощи метода at(). Например:

cout << s1[1] << endl;

cout << s1.at(2) << endl;

Если индекс превышает длину строки, порождается исключение out_of_range.

4. Задание № 2

Составить программу для работы со строками.

1. В текстовой строке определить количество слов, начинающихся и заканчивающихся одной и той же буквой.

2. В текстовой строке определить количество слов, в которых есть хотя бы одна буква 'd'.

3. В текстовой строке определить количество слов, в которых содержится ровно три буквы ‘e’.

4. В текстовой строке найти самое длинное слово и вывести его на экран вместе с его длиной.

5. В текстовой строке заменить все пробелы знаком '_'.

6. В текстовой строке поменять все символы '!' на '?'.

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

8. На основе текстовой строки, введенной пользователем, создать новую строку, в которой все пары символов 'ph' будут заменены на символ 'f'.

9. На основе текстовой строки, введенной пользователем, создать новую, из которой будут удалены все знаки ‘-’ и ‘+’.

10. В текстовой строке найти количество символов арифметических операций (т.е. знаков ‘+’, ‘-‘, ‘/’ и ‘*’).

11. На основе текстовой строки, введенной пользователем, создать новую строку, где каждый третий символ заменен знаком ‘#’.

12. Подсчитать, сколько раз пара 'th' входит в заданный текст.

13. В текстовой строке найти самое короткое слово и вывести его на экран вместе с его длиной.

14. В строке заданы фамилия, имя и отчество студента (именно в таком порядке). Напечатайте его фамилию и инициалы.

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

16. Напишите программу, которая позволяет ввести строку и вывести ее, сокращая каждый раз на один символ до тех пор, пока в строке не останется один символ.

17 Дана текстовая строка. Определить является ли она положительным или отрицательным целым числом.

18. В текстовой строке проверить, какая буква встречается чаще – 'a', 'b' или ‘c’. В качестве результата вывести соответствующее текстовое сообщение.

19. В текстовой строке проверить правильность расстановки круглых скобок (т.е. соответствует ли количество открывающих скобок количеству закрывающих).

20. В текстовой строке подсчитать число вхождений тройки символов 'abc'.

21. В текстовой строке определить количество слов, начинающихся с буквы 'a'.

22. В текстовой строке определить количество слов, заканчивающихся буквой 'w'.

23. Дана текстовая строка. Найти в ней количество нулей.

24. В текстовой строке заменить все символы ‘@’ на ‘#’.

25. Дана текстовая строка. Найти в ней количество слов, длина которых равна 5 символам.

26. Дана текстовая строка. Найти в ней количество цифр ‘1’, ‘2’ и ‘3’.

27. В текстовой строке определить количество слов, в которых содержатся буквы ‘x’ и ‘y’ (и та, и другая вместе).

28. В текстовой строке найти количество точек и запятых.

5. Структуры

В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке С++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С:

struct [ имя_типа ] {

тип_1 элемент_1;

тип_2 элемент_2;

тип_n элемент_n;

} [ список_описателей ];

Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.

Описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например:

struct Worker{ // описание нового типа Worker

char fio[30];

int age, code;

double zarpl;

}; // описание заканчивается точкой с запятой

// определение массива типа Worker и указателя на тип Worker:

Worker mas_struct[100];

Доступ к полям структуры выполняется с помощью операций выбора . (точка) при обращении к полю через имя структуры, например:

Worker worker, mas_struct[100];

worker.fio = "Миронов";

Источник: https://studfile.net/preview/16672682/