Варианты индивидуальных заданий
Лабораторная работа №6
Обработка символьных и строковых данных
Цель работы: изучить особенности обработки строковых данных в С/С++. Написать и отладить программу работы со строками c использованием стандартных функций.
Теоретические сведения
Строки как одномерные массивы символов
В языке Си отдельного типа данных «строки символов» нет. Работа со строками реализована путем использования одномерных массивов типа char, т.е. строка символов – это одномерный массив типа char, заканчивающийся нулевым байтом. Нулевой байт – это байт, каждый бит которого равен нулю, при этом для нулевого байта определена символьная константа «\0» (признак окончания строки или нуль-терминатор). Поэтому если строка должна содержать k символов, то в описании массива необходимо указать k+1 элемент.
Например, описание: char st[5]; означает, что строка содержит четыре символов, а последний байт отведен под нулевой байт.
Строковая константа в языке Си – это набор символов, заключенных в двойные кавычки. Например: “Обработка символьных данных”. В конце строковой константы явно указывать символ «\0» не нужно, так как это сделает компилятор языка Си.
Строки можно инициализировать при декларации, например:
char S1[11] = ”0123456789”, S2[ ] = ”1234”;
в последнем случае размер строки устанавливается по фактическому количеству.
Для ввода строки с клавиатуры дисплея используются две стандартные библиотечные функции, прототипы которых приведены в заголовочном файле stdio.h.
|
|
Функция scanf( ) вводит значения для строковых переменных спецификатором ввода %s. Но надо помнить, что функция scanf( ) вводит символы до появления первого символа “пробел”.
Библиотечная функция gets( ), обеспечивает ввод строки с пробелами внутри этой строки. При этом ввод строки символов завершается нажатием клавиши ENTER.
Обе функции автоматически ставят в конец строки нулевой байт. Вывод строк производится функциями printf( ) или puts( ). Обе функции выводят символьный массив до первого нулевого байта. Функция printf( ) не переводит курсор после вывода на начало новой строки, программист должен предусмотреть такой перевод в строке формата. Фунцкия puts( ) автоматически переводит курсор после вывода строковой информации в начало новой строки.
При работе со строковыми объектами допустима напрямую только одна операция: операция сцепления «+». Например:
char s1[]=”город”, s2[]=” Барановичи.”, s3[41];
s3=s1+s2; puts(s3);
Получим фразу: город Барановичи.
Операции над строками рекомендуется выполнять с использованием стандартных библиотечных функций, рассмотрим наиболее часто используемые функции библиотеки string.h:
|
|
1) strcpy(S1, S2) – копирует содержимое строки S2 в строку S1;
2) strcat(S1, S2) – присоединяет строку S2 к строке S1 и помещает ее в массив, где находилась строка S1, при этом строка S2 не изменяется; нулевой байт, который завершал строку S1, заменяется первым символом строки S2;
3) strcmp(S1, S2) – сравнивает строки S1 и S2 и возвращает значение =0, если строки равны, т.е. содержат одно и то же число одинаковых символов; значение <0, если S1<S2; и значение >0, если S1>S2.
4) strlen(S) – возвращает длину строки, т.е. количество символов, начиная с первого (S[0]) и до нуль-терминатора, который не учитывается.
5) strstr(S1, S2) – указывает первое появление подстроки S2 в строке S1.
6) преобразование строки S в число (библиотека stdlib.h): целое – (int) atoi(S); длинное целое – (long) atol(S); действительное – (double) atof(S);
при возникновении ошибки данные функции возвращают значение 0;
7) преобразование числа V в строку S: целое – itoa(int V, char S, int kod); длинное целое – ltoa(long V, char S, int kod); значение параметра kod определяет выбор системы счисления для преобразования и находится в диапазоне 2£kod£36, для отрицательных чисел kod = 10.
Пример выполнения задания
Условие. Написать программу подсчета числа слов в строке, содержащей пробелы.
|
|
Составим блок-схему алгоритма решения задачи (рисунок 6.1).
Для ввода строки, содержащей пробелы используем функцию gets.
Рисунок 6.1- Блок-схема решения задачи
Текст функции main() может иметь следующий вид:
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{ int n, i, len;
char str[91];
puts(" Input string ");
gets(str);
if (str[0] != ' ') n = 1; // Здесь и ниже ' ' – пробел
else n = 0;
len = strlen(str);
for(i=1; i<=len; i++) // Просмотр символов строки
if(str[i] == ' ' && str[i+1] != ' ') n++;
printf("\n Words = %d", n); // Вывод количества слов
puts("\nPress any key ... ");
getch();
}
Результат выполнения представленной программы будет иметь вид, представленный на рисунке 6.2:
Рисунок 6.2 — Результат тестирования программы
Варианты индивидуальных заданий
1. Ввести с клавиатуры строку символов. Программа должна определить длину введенной строки, и если длина четная, то удаляются 2 первых символа и переставляются в конец строки, если длина строки нечетная, то удваивается первый и последний символ. Например, если исходное слово –«кот», результат «ккотт» , если исходное слово «молоко», результат «локомо».
|
|
2. Выяснить, имеются ли среди символов некоторой введенной вами строки все буквы, входящие в слово «DOS». Если это так, то определить сколько раз встречается каждая буква этого слова.
3. Ввести с клавиатуры строку символов. Программа должна определить длину введенной строки, и если длина нечетная, то удаляется символ, стоящий посередине строки, а если четная, то определяет какой символ чаще всего встречается в строке.
4. Ввести с клавиатуры строку символов. Составить программу для замены в данной строке всех пробелов на символ $.
5. Ввести с клавиатуры строку символов. Программа должна определить длину введенной строки, и если длина больше 10, то удаляются все цифры, иначе удаляются все буквы.
6. Проверить, является ли выражение, состоящее только из прописных букв заданной строки, палиндромом (т.е. читающееся слева направо и справа налево одинаково, например, «кабак»). Если да, то напечатать полученный палиндром. В противном случае вывести строку, состоящую из символов исходной строки с удаленными прописными символами.
7. Ввести с клавиатуры строку символов. Программа должна определить длину введенной строки, и если длина кратна 4, то первая часть строки меняется местами со второй, иначе удаляется подстрока до первого пробела.
8. Ввести с клавиатуры строку символов. Программа должна определить длину введенной строки, и если длина меньше 10, то удаляются все строчные буквы, если больше 10, то все прописные буквы.
10. В строке символов поменять местами символы на четных и нечетных позициях.
12. С клавиатуры вводится предложение, слова в котором разделены символом подчеркивания. Напечатайте все предложения, которые получаются при перестановке слов исходного предложения.
Пример:
Исходное предложение: КОШКА_СЪЕЛА_МЫШКУ
Перестановки: СЪЕЛА_КОШКА_МЫШКУ
МЫШКУ_СЪЕЛА_КОШКА
КОШКА_МЫШКУ_СЪЕЛА
…
13. С клавиатуры вводится предложение, слова в котором разделены символом подчеркивания. Подсчитайте число вхождений в предложение используемых букв. Результат записать в строку (парами: буква-цифра) и напечатать ее.
Пример:
Введите предложение: КАРАБАС_БАРАБАС
Результат: А6Б3К1Р2С2
14. Текст состоит из слов разной длины. Определить, сколько раз в тексте встречается заданное слово, и какое слово самое короткое.
15. В тексте поменять слова местами (первое с последним, второе с предпоследним и т.д.). Слова имеют разную длину.
16. В заданном тексте удалить все части текста, заключенные в скобки (вместе со скобками).
17. Ввести последовательность чисел, состоящую из нулей и единиц. Требуется между всеми подряд стоящими единицами вставить нуль. На экран вывести исходную и полученную последовательности чисел.
18. Ввести текст длиной М символов (М<200). В заданном тексте везде убрать пару символов «АВ», уплотнив при этом полученную информацию.
19. Вывести на экран самое длинное слово из заданного текста.
20. Имеется строка, содержащая буквы и цифры. Преобразуйте эту строку так, чтобы сначала в ней шли все буквы, встречающееся в исходной строке, но в обратном порядке, а потом – все цифры исходной строки в прямом порядке. Например,
Исходная строка Результат
ad2e76b8 beda2768
21. Ввести строки длиной М и К символов (К< М). Удалить из первой строки все знаки, входящие во вторую строку, и сдвинуть все символы первой строки влево.
22. Даны переменные М, N и строки А и В. В строке А заменить символы, начиная с М-го, на первые N символов строки В.
23. С клавиатуры вводится строка. Выберите из нее все буквы от А(а) до I(i) (строчные преобразуйте в прописные) и отсортируйте их в алфавитном порядке. Например,
Исходная строка: SHiFROVkaOtSHPIonA
Результат: AAFHHII
24. С клавиатуры вводится строка. Выберите из нее все буквы от J(j) до S(s) (строчные преобразуйте в прописные) и отсортируйте их в алфавитном порядке. Например,
Исходная строка: SHiFROVkaOtSHPIonA
Результат: KNOOOPRSS
25. Пусть задано некоторое слово. Напечатать просмотр этого слова слева на-право до тех пор, пока не встретятся повторяющиеся буквы. Если такие буквы встретились, пропустить их и продолжить просмотр с конца слова в обратном порядке (справа налево), пока снова не встретится набор повторяющихся букв. Если такой набор встретился, продолжить просмотр с того места, которое следует за первым набором повторяющихся букв и т.д. «Протокол» просмотра строки вывести на экран; вместо последовательности повторяющихся букв выводить один символ подчеркивания.
Пример:
Исходное слово: НОННИЛЛИОН
«Протокол» просмотра: НО_НОИ_И
26. Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на другую строку с указанием номера очередного вхождения. Допустимые символы – прописные русские и латинские буквы; символ-разделитель “_”.
Пример: Исходная строка: ПОЛИЛИ_ЛИЛИЮ
Какую подстроку заменить: ЛИ
На какую подстроку заменить: СТО
Результат: ПОСТО1СТО2_СТО3СТО4Ю
27. Пусть задано некоторое слово. Заменить в нем все повторяющиеся буквы одним знаком подчеркивания. На экран вывести исходное слово и полученное.
28. Дан текст из слов, разделенных пробелом. Вывести все слова перевертыши, которые есть в данном тексте. Слова перевертыши читаются справа налево, так же как и слева на право, например: казак, шалаш.
29. В строке, состоящей из групп нулей и единиц, подсчитать количество единиц в группах с нечетным количеством символов.
30. Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, которая соответствует записи целого числа.
Дата добавления: 2020-11-15; просмотров: 735; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!