Искусственный интеллект. Строки, контекст и волны на Паскале. Сергей Соболенко
Чтение книги онлайн.

Читать онлайн книгу Искусственный интеллект. Строки, контекст и волны на Паскале - Сергей Соболенко страница 8

СКАЧАТЬ переменной S присвоено значение «Мама мыла раму»; но нам известно только, что в ней находится три слова (длина которых неизвестна) и необходимо получить первое слово из этой строки, отправив его в переменную S2. Это действие мы можем выполнить так:

      – ведь мы помним, что функция Pos находит первое совпадение подстроки, а в начале строки пробела у нас нет. Так в S2 попадет слово «Мама».

      Если же нам требуется скопировать текст, следующий за первым пробелом, эта процедура будет выглядеть несколько сложнее:

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

      Илл. 6. Копирование фрагмента строки с помощью функций Copy и Pos, с целью получения части текста, следующего за первым словом в строке.

      Результат – можно увидеть на экране:

      Илл. 7. Результат работы программы копирования фрагмента текста.

      Также, предположим, что нам необходимо скопировать последнее слово из строки. В данном случае, поскольку функция «Pos» нам не поможет, придется воспользоваться циклом, чтобы «вручную» установить место нахождения последнего пробела.

      Контролировать конкретный символ строки можно, используя числовое значение индекса символа в строке, при этом числовой индекс указывается в квадратных скобках S [n].

      Так, в упомянутой строке S [1] =«М», S [2] =«а», s [3] =«м» и т. д. Зная общее число символов с помощью функции length (S) мы можем перебором достигнуть нужного нам символа в цикле и после произвести нужную операцию. В следующей программе мы получаем последнее слово, благодаря перебору символов с «хвоста», уменьшая значение, полученное из длины строки оператором Dec (i). Так же, на всякий случай мы уточняем условие выхода из цикла в случае, если пробел так и не будет достигнут (i <1).

      Илл. 8. Копирование последнего слова из фрагмента текста с использованием цикла Repeat и строкового индекса.

      Результат удовлетворяет ожиданиям.

      Илл. 9. Итог работы программы (илл. 8).

      Почему же в примерах мы использовали английскую транскрипцию? Очень просто, – поскольку по умолчанию в компиляторе TMT Pascal используется кодировка Win, и та же программа с русским предложением внутри даст непонятный итог:

      Илл.10. Пример неудачного использования программы по работе с текстом, – из-за несовпадения кодировок ввода (Win) и вывода (DOS) удовлетворительный результат не может быть получен.

      Так он будет выглядеть, несмотря на то, что формальных ошибок мы не допускали:

      Илл. 11. Так выглядит фиаско при несовпадении кодировок.

      И это ничто иное как слово «раму», не переведенное в Dos-кодировку.

      Похожий, СКАЧАТЬ