Тема: Работа со строковым типом данных.
Цель: Приобрести практические навыки в проектировании программ, содержащих строковые типы данных.
Теоретические сведения:
Приступая к решению задач на предложенную тему, следует вспомнить, что:
1. Строкой называется массив символов.
2. При определении строки ей присваивается имя и указывается максимальное количество символов, которое может в ней содержаться (с учетом нулевого символа \0).
3. Си/Си++ позволяют осуществлять ввод и вывод массива символов в виде некой целостности – строки. В то же время, каждый символ является отдельным независимым элементом массива.
Типичные функции работы со строками Си/Си++ (требуется подключение библиотекиstring.h)
Функция | Описание |
strcat(s1,s2); | Добавляет символы из одной строки в конец другой |
strncat(s1,s2,n); | Добавляет определенное количество символов одной строки в другую |
переменная=strchr(s,c) | Возвращает позицию первого вхождения символа в строку |
переменная=strcmp(s1,s2); | Сравнивает две строки (пременная=0 в случае идентичности строк) |
переменная=strcmpi(s1,s2); | Сравнивает две строкибез учета регистра символов |
strcpy(s1,s2); | Копирует одну строку в другую или присваивает |
strncpy(s1,s2,n); | Копирует определенное количество символов из одной строки в другую |
Переменная=strlen(s); | Определяет длину строки |
strlwr(s); | Переводит символы строки в нижний регистр |
strset(); | Заменяет определенное количество символов строки на другие символы |
strrev(s); | Переставляет символы в строке |
strstr(s1,s2) | Ищет включение одной строки в другую |
strupr(s); | Переводит символы строки в верхний регистр |
где S, s1,s2 – имена строковых переменных, n – количество символов, с - символ
Пример: Требуется перевести введенное слово в верхний регистр:
#include <conio.h>
#include <stdio.h>
int main()
{
char str[] = "sergey";
for (inti=0; str[i]!= '\0';i++){
str[i] -= 32;
}
for (inti=0; str[i]!= '\0';i++){
printf ("%c", str[i]);
}
getch();
return 0;
}
Все функции по обработке строк:Шилдт, Герберт Справочник программиста по С/С++.: Пер. с англ. Уч. Пос.- М.: Издательский дом «Вильямс», 2013
Методические рекомендации к выполнению лабораторной работы:
1. При выполнении данной лабораторной работы запрещается использовать функции обработки строк С++.
2. При выполнении задания необходимо опираться на базовые алгоритмы обработки гомогенных типов данных.
Варианты задания №1:
Вариант | Задание |
Дано предложение, определить кол-во слов в нём. | |
Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В. | |
Строка содержит английский текст Подсчитать количество букв, начинающихся на букву b. | |
Определить, сколько раз в строке встречается данное слово. | |
Дана символьная строка Определить, есть ли в строке слово из трех букв. | |
Дана символьная строка Определить количество пробелов в данной строке. | |
Ввести слово. Определить является ли данное слово перевертышем. | |
Ввести текст телеграммы и стоимость одного слова. Определить стоимость телеграммы (при вводе текста запятые обозначаются словом ЗПТ, точки - словом Т). | |
Дан текст Определить все слова оканчивающиеся на "ая". | |
Подсчитать количество цифр в произвольной строке. | |
Дана строка символов. Подсчитать, сколько различных символов встречаются в ней. Вывести их на экран. | |
Дана символьная строка. Подсчитать количество букв k в последнем ее слове. | |
Дан текст Преобразовать его следующим образом: если нет символа *, то оставить его без изменений, иначе заменить каждый символ *, встречающийся после первого его вхождения, на символ -. | |
В заданной строке текста удалить первое и последнее слово. | |
Во введенной строке символов заменить все вхождения "123" на "45". |
Варианты задания №2:
№ | Исходный текст | Задание |
Два предложения | Поменять предложения местами | |
Предложение из трех слов | Слова разделить запятыми | |
Предложение, содержащее слово в скобках (не первое, не последнее) | Слово в скобках перенести в конец предложения (перед точкой) | |
В тексте две и более запятых | Удалить вторую запятую | |
Два предложения, второе состоит из двух слов | Слова второго предложения поменять местами | |
Перед союзом “а” пропущена запятая, но буква “а” есть в словах предложения до и после союза | Вставить недостающую запятую перед союзом "а" | |
Два предложения, второе состоит из трех слов | Второе и третье слова второго предложения поменять местами | |
Два предложения, каждое содержит не менее двух слов | Первые слова предложений поменять местами | |
В тексте должны быть две запятые | Вывести на печать часть текста между запятыми | |
Предложение из четырех слов | Второе и последнее слова предложения поменять местами | |
Предложение из трех слов | Каждое слово с новой строки | |
Не крайние слова предложения из пяти слов разделены дефисом | Слова до и после дефиса поменять местами | |
Предложение из трех слов | Новый порядок слов: 2,1,3 | |
Предложение из трех слов | Среднее слово - в круглые скобки | |
Два предложения, каждое состоит из двух слов | Вторые слова предложений поменять местами | |
Предложение из трех слов | Новый порядок слов: 2,3,1 | |
Имеется слово “три” (не первое и не последнее), но “три” есть и в словах до и после слова “три” | Заменить слово “три” словом “четыре” | |
Предложение из четырех слов | Новый порядок слов: 4,3,2,1 | |
Имеется слово, заключенное в кавычки (“), оно не первое | Удалить слово вместе с кавычками | |
Два предложения по три слова | Последние слова предложений поменять местами | |
Предложение из четырех слов | Третье слово - в кавычки (“) | |
Имеется слово, начинающееся с буквы “а” (не первое), но буква “а” есть и в других словах текста | Удалить это слово из текста | |
23 | Предложение из четырех слов | Второе и третье слова предложения заключить в круглые скобки |
Три предложения | Точки в конце предложений заменить знаком “?” | |
Предложение из четырех слов | Удалить третье слово | |
Три предложения | Первое и последнее предложения поменять местами | |
Имеется слово “много” (не первое и не последнее), но “много” есть и в словах до и после слова “много” | Заменить слово “много” словом “мало” | |
Имеется слово (не последнее), заканчивающееся буквой “о”, но буква “о” есть и в других словах | Заключить это слово в апострофы. | |
В тексте две и более запятых | Вместо второй запятой символ “;” | |
В тексте две и более запятых | Исключить две первые запятые |
Варианты задания №3:
Вариант | Задание | ||
Дана строка символов. Составить из неё новую строку, в которой присутствуют символы старой строки, но каждый символ встречается только один раз. Вывести на экран новый текст и количество удаленных символов. | |||
Дана строка символов. Вывести на экран все символы строки, встречающиеся в ней более одного раза, а также количество символов, встретившихся более одного раза. | |||
Дана строка символов. Если в строке чётное число символов, удалить из неё все последующие вхождения первого символа, в противном случае удалить символ, расположенный в середине строки. | |||
Дана символьная строка Найти наибольшую последовательность букв а. | |||
Дана символьная строка Найти слова, начинающиеся и заканчивающиеся на одну и ту же букву. | |||
Дана символьная строка Определить, есть ли в строке слово из трех букв. | |||
| |||
Дана строка, состоящая из слов, разделенных пробелами, и оканчивающаяся точкой Напечатать слова, начинающиеся с той же буквы, что и первое слово. | |||
В заданной последовательности символов, заканчивающихся точкой, распечатать все цифры, не встречающиеся в ней, в убывающем порядке. | |||
Вывести слова, которые встречаются в строке по одному разу | |||
Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного (с дробной частью) — вывести 2; если строку нельзя преобразовать в число, то вывести 0. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.». | |||
Составьте программу шифрования текстового сообщения Использовать простейший способ шифрования, при котором шифровальщик задает ключ шифровки – целое число, определяющее величину смещения букв русского алфавита Например, ключ = 3, тогда в тексте буква «а» заменяется на «г» и т д Составить программу дешифрования текстового сообщения, зашифрованного программой. | |||
Дана строка символов Вывести слово, содержащее наибольшее количество цифр и вывести число цифр в каждом слове. | |||
Ввести N фамилий. Отсортировать их в алфавитном порядке. | |||
Дана строка, изображающая целое число Вывести сумму цифр этого числа. | |||
Дано N предложений, слова в которых разделены пробелами Вывести их на печать в порядке возрастания общей длины слов в предложении (без учета количества разделяющих пробелов). | |||
Даны две строки символов S1 и S2 Выяснить, верно ли, что среди символов строки S1 имеются все буквы строки S2. | |||
Отредактировать заданное предложение, удаляя из него все слова с четными номерами и переворачивая слова с нечетными номерами Переворачивание слов оформить в виде функции. |
Дополнительное задание:
Напишите программу1, которая разделяет слова в введенной строке на отдельные лексемы (аналог функции strtok()). Учтите замер времени выполнения написанной программы. После напишите программу2, но с использованием библиотечной функции strtok(). Для программы2 так же учтите замер времени. Сделайте выводы, сравнив время выполнения программы1 и программы2.
Контрольные вопросы:
- Что понимается под строкой?
- Как описываются строки в разделе переменных?
- Как организуется ввод строк в программе?
- Как организуется вывод строк в программе?
- Возможны ли операции над отдельными элементами строки?
Содержание отчета:
- Схемы алгоритмов.
- Тексты составленных программ.
- Протоколы к составленным программам.
- Вывод о проделанной работе.