Процедуры обработки строк.
Наименование |
Назначение |
|
insert(строка1, строка2, число) |
Вставляет рядок1 в рядок2, начиная с позиции, заданной числом. Если в результате выходит строка длины больше максимальной, то он усекается дело. |
|
delete(строка, число1,число2). |
Удаляет из строки подстроку, начиная с позиции, заданной числом1, длиной, заданной числом2. Если число1 больше размера строки, то подстрока не удаляется. Если число2 больше начальных количества, то удаляются символы до конца строки |
|
str(число[:M[:N]],строка). |
Преобразование числа в строку. M задает общее количество символов, получаемых в строке, N – для вещественных чисел задает количество цифр в дробной части. |
|
val(строка, число, код). |
Преобразование строки символов во внутреннее представление числа. Код указывает номер неправильного символа или равный 0 в случае успешного преобразования. |
|
Примеры:
Начальные данные: S=’крокодил’. Оператор: d:=copy(s,3,3). Результат: d=’око’. |
. Оператор: val(‘+12.3’,v,k). Результат: v=12.3, k=0 { преобразование прошло успешно} |
Начальные данные: S=’крокодил’. Оператор: insert(‘h’,d,3). Результат: d=’окно’. |
Начальные данные: S=’крокодил’. Оператор: delete(s,1,1). Результат: s=’роил’ |
Оператор: str(123,s). Результат: s=’123’. |
Начальные данные: S=’крокодил’. Оператор: delete(s,4,3). Результат: =’кроил’ |
.Оператор: val(‘23+5’,v,k). Результат: v=неверно, k=3 { ошибка при попытке превратить третий символ} |
|
Рассмотрим задачу по обработке строковых данных.
Пример. Заданна строка, состоящая из слов, разделенных одним или несколькими пробелами. Удалить повторные вхождения каждого слова.
Выделяем слова, переписываем их в первую строку двумерного массива, во вторую строку в соответствующую позицию записываем ‘0’ для уникального слова и ‘1’- для слова, которое повторяется. Потом формируем строку, которая состоит из элементов первой строки массива, в которых во второй строке записан '0‘ и распечатываем строку.
program ttt;
const nn=10;
type mas=array [1..2,1..nn] of string;
var a:mas;
n:integer;
s,ss:string; { начальная и вспомогательная строки}
и, j, k:integer;
begin
write(‘Введите строку : ’);readln(s);
s:=s+’ ’;j:=0; ss:=’ ’;
for i:=1 to length(s) -1 do
if (s[i]<>’ ’) and(s[i+1]=’ ’) { выделение слов}
then begin ss:=ss+s[i];j:=j+1;a[1, j]:=ss;a[2, j]:=’0’; ss:=’ ’;
{ в первую строку{ записываем слово}
end
{0’ во второй строке означает, что слово встретилось впервые}
else if s[i]<>’ ’ then ss:=ss+s[i];
for i:=1 to j-1 do for k:=i+1 to j do
if (а[2,i]<>’1’) and(а[2,k]<>’1’) and(а[1,i]=a[1,k]) then а[2,k]=’1’; { нашли слова, которые совпали}
s:=’ ’;
for i:=1 to j do if а[2,i]<>’1’ then s:=s+a[1,i]+’ ’;
writeln(‘Результат : ’,s);
end.
Не следует забывать инициализировать строку перед ее заполнением (первый оператор программы). В противном случае, так как начальная длина строки является неопределенной, можно получить произвольный результат.
