Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ.doc
Скачиваний:
23
Добавлен:
28.10.2018
Размер:
543.74 Кб
Скачать
  1. Символьні рядки. Обробка текстових даних.

Мова С не має спецiального типу для оголошення символьних рядкiв, а розглядає символьний рядок як особливий вид масиву. Елементи масиву, який називають символьним рядком, мають тип char, їх значеннями є коди символiв, з яких складається цей рядок. Процеси опрацювання символьних рядкiв у С-програмах базуються на двох основних властивостях рядкiв: 1) iм’я символьного рядка є константним вказiвником на його перший символ; 2) кiнець рядка задається нуль-символом ‘\ 0’.

Бiблiотеки мови С мiстять набiр функцій, призначених для введення та виведення одиночних символiв i цiлих символьних рядкiв. Функцiї введення/виведення, прототипи яких оголошено в заголовному файлi <stdio.h>, належать до стандартних функцiй мови - вони є в усiх реалiзацiях С. Цi функції здiйснюють потокоорiєнтоване буферизоване введення/виведення даних. У процесi введення набрана на клавiатурi iнформацiя заноситься у спецiальний внутрiшнiй буфер i одночасно вiдображається на екранi. Додатковi можливостi надають функції консольного введення/виведення, які оголошено в заголовному файлi <conio.h>. Прототипи бiблiотечних функцiй, призначених для роботи з символьними рядками, оголошенi в заголовному файлi <string.h>.

Як уже згадувалось, в мові Pascal є два види текстових даних: символічні (char) та рядкові (string).

         Для роботи з символічними даними є функції: Chr та Ord.

         Функція Chr за кодом виробляє відповідний символ, наприклад, результатом функції Chr(66) буде символ ‘B’.

         Функція Ord виробляє код свого аргументу: значенням функції Ord(‘B’) буде число 66.

         Символічні дані можна об’єднувати в масив, наприклад:

 

         Var P: array[1..50] of char;

          Фактично P – це рядок з 50 символів. Його можна ввести в циклі.

         Спеціальна функція Length(T) повертає ціле число – кількість символів в рядку. Рядок можна ввести з клавіатури за допомогою оператора Readln.

Наприклад:

 Readln(Т);

 

Для рядкових даних допустима операція зчеплення, наприклад:

 Q:=’ Великий ‘ + ‘ Дніпро ‘;

 Але можливий і такий варіант:

 

LivePole:=’‘; {це пустий рядок}

For i:=1 to k do LivePole:= LivePole+’ ‘;

 

Після завершення циклу змінна LivePole буде мати k проміжків.

Для обробки даних типу String використовують спеціальні підпрограми.

Процедура Insert(S1, S2, Npoz) вставляє рядок S1у рядок S2, починаючи з позиції Npoz.

Приклад:

 

S2:=’ Приватизація ‘;

Insert (‘х’ , S2, 4); {в S2 буде – Прихватизація}

 Процедура Delete(S1, Npoz, Kil) вилучає з рядку S1 підрядок із Kil символів, починаючи з позиції Npoz.

Приклад:

 S1 := ‘Закріпити’;

Delete (S1,3,3); {в S1буде - запити}

 Функція Copy(S1, Npoz,Kil) виконує копіювання послідовності із Kil символів з позиції Npoz рядку S1.

Приклад:

 S2:=Copy(‘Металіст’,5,3); {в S2 буде – ліс}

 Функція Pos(S1, S2) шукає в S2 (з лівого краю) підрядок S1. Результатом функції є ціле число – номер позиції, починаючи з якої підрядок S1 перший раз входить до S2. Якщо S1 в S2 немає, результат дорівнює нулю.

Приклад:

 S2:=’ Влада чи Безвладдя‘;

Nom:=Pos(‘ ‘,S2); {Nom стане рівним 6}

 Щоб знайти у тексті місце другого проміжку, треба щось зробити з першим, наприклад, замінити його на ‘*’.

 S2[Pos(‘ ‘,S2)]:=’*’;

 Функція Concat(S1,S2,…,SN) виконує зчеплення рядків S1, S2,…,SN в один рядок.

Приклад: Підрахувати кількість слів у заданому реченні.

 Var s:String;

i,j:Byte;

Begin

 Write('Input line : ');

 Readln(s);

 s:=s+' ';

 j:=0;

 For i:=2 to Length(s) do

  If (s[i]=' ')and(s[i-1]<>' ') Then j:=j+1;

 Writeln('Result = ',j);

End.