КаталогИндекс раздела
НазадОглавлениеВперед


Лабораторная работа N 1
РАБОТА С СИМВОЛЬНИМИ СТРОКАМИ

1. Цель работы

Закрепление практических навыков в работе с массивами и указателями языка C, обеспечении функциональной модульности

2. Темы для предварительного изучения

3. Постановка задачи

По индивидуальному заданию создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка C, но не применять их в своей функции. Предусмотреть обработку ошибок в задании параметров и особые случаи. Разработать два варианта заданной функции - используя традиционную обработку массивов и используя адресную арифметику.

4. Индивидуальные задания

╪п.п Вариант
1 Функция - Copies(s,s1,n). Назначение - копирование строки s в строку s1 n раз
2 Функция - Words(s). Назначение - подсчет слов в строке s
3 Функция - Concat(s1,s2). Назначение - конкатенация строк s1 и s2 (аналогичная библиотечная функция C - strcat)
4 Функция - Parse(s,t). Назначение - разделение строки s на две части: до первого вхождения символа t и после него
5 Функция - Center(s1,s2,l). Назначение - центрирование - размещение строки s1 в середине строки s2 длиной l
6 Функция - Delete(s,n,l). Назначение - удаление из строки s подстроки, начиная с позиции n, длиной l (аналогичная библиотечная Функция есть в Pascal).
7 Функция - Left(s,l). Назначение - выравнивание строки s по левому краю до длины l.
8 Функция - Right(s,l) Назначение - выравнивание строки s по правому краю до длины l.
9 Функция - Insert(s,s1,n). Назначение - вставка в строку s подстроки s1, начиная с позиции n (аналогичная библиотечная функция есть в Pascal).
10 Функция - Reverse(s). Назначение - изменение порядка символов в строке s на противоположный.
11 Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная функция C - strstr).
12 Функция - LastPos(s,s1). Назначение - поиск последнего вхождения подстроки s1 в строку s.
13 Функция - WordIndex(s,n). Назначение - определение позиции начала в строке s слова с номером n.
14 Функция - WordLength(s,n). Назначение - определение длины слова с номером n в строке s.
15 Функция - SubWord(s,n,l). Назначение - выделение из строки s l слов, начиная со слова с номером n.
16 Функция - WordCmp(s1,s2). Назначение - сравнение строк (с игнорированием множественных пробелов).
17 Функция - StrSpn(s,s1). Назначение - определение длины той части строки s, которая содержит только символы из строки s1.
18 Функция - StrCSpn(s,s1). Назначение - определение длины той части строки s, которая не содержит символы из строки s1.
19 Функция - Overlay(s,s1,n). Назначение - перекрытие части строки s, начиная с позиции n, строкой s1.
20 Функция - Replace(s,s1,s2). Назначение - замена в строке s комбинации символов s1 на s2.
21 Функция - Compress(s,t). Назначение - замена в строке s множественных вхождений символа t на одно.
22 Функция - Trim(s). Назначение - удаление начальных и конечных пробелов в строке s.
23 Функция - StrSet(s,n,l,t). Назначение - установка l символов строки s, начиная с позиции n, в значение t.
23 Функция - Space(s,l). Назначение - доведение строки s до длины l путем вставки пробелов между словами.
24 Функция - Findwords(s,s1). Назначение - поиск вхождения в строку s заданной фразы (последовательности слов) s1.
25 Функция - StrType(s). Назначение - определение типа строки s (возможные типы - строка букв, десятичное число, 16-ричное число, двоичное число и т.д.).
26 Функция - Compul(s1,s2). Назначение - сравнение строк s1 и та s2 с игнорированием различий в регистрах.
27 Функция - Translate(s,s1,s2). Назначение - перевод в строке s символов, которые входят в алфавит s1, в символы, которые входят в алфавит s2.
28 Функция - Word(s). Назначение - выделение первого слова из строки s.
Примечание: под "словом" везде понимается последовательность символов, которая не содержит пробелов.

5. Пример решения задачи

5.1. Индивидуальное задание:

5.2. Описание метода решения

5.2.1. Символьная строка в языке C представляется в памяти как массив символов, в конце которого находится байт с кодом 0 - признак конца строки. Строку, как и любой другой массив можно обрабатывать либо традиционным методом - как массив, с использованием операции индексации, либо через указатели, с использованием операций адресной арифметики. При работе со строкой как с массивом нужно иметь в виду, что длина строки заранее неизвестна, так что циклы должны быть организованы не со счетчиком, а до появления признака конца строки.

5.2.2. Функция должна реализовывать поставленную задачу - и ничего более. Это означает, что функцию можно будет, например, перенести без изменений в любую другую программу, если спецификации функции удовлетворяют условиям задачи. Это также означает, что при ошибочном задании параметров или при каких-то особых случаях в их значениях функция не должна аварийно завершать программу или выводить какие-то сообщения на экран, но должна возвращать какое-то прогнозируемое значение, по которому та функция, которая вызвала нашу, может сделать вывод об ошибке или об особом случае.

Определим состав параметров функции:

    int substr (src, dest, num, len);

где src - строка, с которой выбираются символы;
  dest - строка, в которую записываются символы;
  num - номер первого символа в строке src, с которого начинается подстрока (нумерация символов ведется с 0);
  len - длина выходной строки.

Возможные возвращаемые значения функции установим: 1 (задание параметров правильное) и 0 (задание не правильное). Эти значения при обращениях к функции можно будет интерпретировать как "истина" или "ложь".

Обозначим через Lsrc длину строки src. Тогда возможны такие варианты при задании параметров: