Варианты индивидуальных заданий

Лабораторная работа №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; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!