Если у нас есть числа, то оперируя с числами можно решать разнообразные задачи,- находить корни квадратного уравнения, вычислять траектории полета к луне или другим планетам, определять оптимальные характеристики проектируемых самолетов, многие, многие задачи. Как правило, все современные сложные задачи решаются на компьютере. Изначально, компьютер умеет не много. Его система команд включает такие операции, как сложение, умножение, деление, сравнение двоичных чисел. На основе этих элементарных операций можно написать программы, вычисляющие стандартные функции, например, sin(x) и другие. Идя по этому пути, благодаря программированию, можно решать самые сложные задачи.
А что, если у нас есть слова в некотором алфавите. Есть ли интересные задачи при работе с текстами. Ответ, да. Интересных и важных задач над текстами не меньше, чем над числовыми данными. Можно считать, что их больше, поскольку задачи над числами можно рассматривать как частный случай задач над текстами. Для компьютера каждое число можно рассматривать как слово в двоичном алфавите. Приведу пример некоторых важных и интересных задач над текстами. Задача, крайне сложная и на удивление крайне эффективно решенная – задача поиска нужного текста в интернете по запросу. Практически каждый ежедневно обращается к решению этой задачи. Кажется удивительным, как компьютер в течение секунды находит тысячи текстов, соответствующих нашему запросу в невероятной груде ежесекундно пополняемых текстов, хранимых в интернете.
Еще одна важная для программистов задача - задача трансляции текста программы, написанного на алгоритмическом языке, в программу, написанную в командах компьютера. Это сложная задача, но успешно решаемая. Разработаны компиляторы для многочисленных алгоритмических языков.
Другая не менее важная задача – это задача перевода текста, написанного на одном естественном языке, в текст на другом естественном языке с сохранением смысла текста, например, перевод текстов с русского на английский, или с английского на китайский. Эту задачу удалось пока решить лишь частично. Хороших программ, позволяющих переводить художественные тексты, не существует, но есть множество программ, позволяющих выполнить подстрочный перевод, переводя слова и отдельные фразы.
Над числами определены элементарные операции и функции, используя которые можно решать более сложные задачи.
Какие же элементарные функции и операции используются при работе с текстами – словами в некотором алфавите?
Первая операция (функция), которую мы рассмотрим называется операцией конкатенации, или сцепления. Обычно для ее обозначения используется символ сложения "+".
Если s1 и s2 – слова, то
s3 = s1 + s2
Далее наряду с термином "слово в алфавите Т" будем использовать его синоним – "строка в алфавите Т", или короче "слово" и "строка", упоминая алфавит, только тогда, когда требуется уточнить, о каком именно алфавите идет речь.
Константные строки, составленные из символов алфавита, будем записывать, заключая строку в кавычки. Пусть например s1 = "ведь", s2 = "мед", тогда s3 = s1 + s2 будет иметь значение "ведьмед", но s3 = s2 + s1 будет иметь значение "медведь".
Пусть например s1 = "рок", s2 = "око", тогда s3 = s1 + s2 будет иметь значение "рококо", но s3 = s2 + s1 будет иметь значение "окорок".
Пусть s – слово длины m, представимое в виде s = c1 c2… cm, где ck – символы алфавита. Подстрокой строки s будем называть строку s1 = cj cj+1… cj+n, где
j >= 1, j + n <= m
Для работы с текстами полезно иметь следующий набор функций над строками:
Length(s) – в качестве результата эта функция возвращает длину строки s.
Вот примеры применения этой функции. Пусть s = "рококо", n = Length(s). В результате значение n равно 6. Если s = "рок, кок и око", то n = Length(s) = 14, учитывая символы пробелов и запятых.
Substring(s, k, n) – в качестве результата эта функция возвращает подстроку строки s длины n, начинающуюся в позиции k. Будем полагать, что нумерация символов строки начинается с 1. Будем также полагать, что в качестве результата возвращается пустая строка, если k и n заданы некорректно, не позволяя задать подстроку строки s.
Вот примеры применения этой функции. Пусть s = "рококо". s1 = Substring(s, 2, 3). В результате значение s1 равно "око". Если s1 = Substring(s, 4, 3), то значением s1 также равно "око", но, если s1 = Substring(s, 5, 3), то s1 получит значением пустой строки "", - значение пустого слова ε, - строки, не содержащей символов.
Insert(s, s1, k) – в качестве результата эта функция возвращает строку s, в которую, начиная с позиции k вставлена подстрока s1.
Вот примеры применения этой функции.
Пусть s = "поход". s1 = Insert(s, "ар", 2). В результате значение s1 равно "пароход".
Если s = "монна", s1 равно "ад", s2 = Insert(s, s1, 2), то s2 получит значение "мадонна".
Remove(s, k, n) – в качестве результата эта функция возвращает строку s, в которой, начиная с позиции k удалена подстрока длины n.
Вот примеры применения этой функции.
Пусть s = "пароход". s1 = Remove(s, 2, 2). В результате значение s1 равно "поход".
Если s = "мадонна", s1 равно "ад", s1 = Remove (s, 2, 2), то s1 получит значение "монна".
Replace(s, k, n, s1) – в качестве результата эта функция возвращает строку s, в которой, начиная с позиции k подстрока длины n заменена подстрокой s1.
Вот примеры применения этой функции.
Пусть s = "Тот повар", s1 = "кок", s2 = Replace(s, 5, 5, s1). В результате значение s2 равно "Тот кок".
Если s = "гора", s1 = Replace(s, 4, 1, "е"); s2 = Replace (s1, 1, 1, "м"), то s2 получит значение "море".
Вызов функции Replace эквивалентен вызову двух функций – Remove и Insert. Замена подстроки другой подстрокой эквивалентна удалению подстроки и вставке новой подстроки.
IndexOf(s, s1) – в качестве результата эта функция возвращает индекс первого вхождения в строку s подстроки s1. Если такового вхождения нет, то возвращается значение -1.
Вот примеры применения этой функции.
Пусть s = "рококо", s1 = "кок", i = IndexOf(s, s1). В результате значение i равно 3.
Если s = "рококо", s1 = "око", то i получит значение 2. Заметьте, подстрока "око" дважды входит в строку "рококо". Функция возвращает индекс первого вхождения.
Split(s, s1). Строка s1 – это строка, содержащая разделители, используемые в текстах на естественном языке. Функция Split расщепляет строку s на строки, используя заданные разделители. Результатом является массив строк. Исходный текст можно с ее помощью разделить на предложения, используя в качестве разделителей символы, задающие конец предложения – точку, восклицательный и вопросительный знаки. Предложения можно разделить на слова, используя такие символы, как пробелы, запятые, тире, двоеточия.
Вот примеры применения этой функции.
Пусть s = "Мама мыла Машу мылом", s1 = " ", massiv = Split(s, s1). Здесь разделителем слов является пробел. В результате вызовабудет получен массив из 4-х строк: "Мама", "мыла", "Машу", "мылом".
Если s = "рок, кок и око", s1 = ", ", massiv = Split(s, s1), то результатом будет массив из 4-х слов: "рок", "кок", "и", "око".
Join(massiv, s1). Это функция обратная по отношению к функции расщепления Split. Ей на вход подается массив строк. Функция соединяет строки в единую строку, вставляя между ними разделитель, заданный в строке s1.
Вот примеры применения этой функции.
Пусть massiv состоит из 4-х строк: "Мама", "мыла", "Машу", "мылом",
s = Join(massiv, " " ). В результате s получит значение: "Мама мыла Машу мылом".
Пусть massiv состоит из 4-х строк: "Вот", "дом", "который", "построил", "Джек". Пусть s = Join(massiv, " " ). В результате s получит значение: "Вот дом который построил Джек". Запятую, требуемую по правилам русского языка, придется вставлять отдельно.
В разных языках программирования применяются схожие наборы базовых функций для работы со строками. Конечно, названия функций могут быть другими, состав и параметры функций также могут варьироваться, но так или иначе всегда присутствуют базовые операции, позволяющие осуществлять вставку, удаление, замену, проверку вхождения подстрок в строку. Для алгоритмического языка, используемого для записи учебных программ, могут использоваться следующие названия рассмотренных функций: Length - Длина, Substring - Подстрока, Insert - Вставка, Remove - Удаление, Replace - Замена, IndexOf – Индекс вхождения, Split -Расщепление, Join –Объединение.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.