|
РАБОТА СО СТРОКАМИ Тип String (строка) в Турбо Паскале широко используется для обработки текстов. Этот тип является стандартным и во многом похож на одномерный массив символов Array [0..N] of Char. Значение N соответствует количеству символов в строке и может меняться от 0 до 255. Символы, входящие в строку, занимают позиции с 1 до N. Начальный байт строки с индексом 0 содержит информацию о ее длине, т.е. это символ с кодом, равным длине строки. Можно, также описывать переменные типа String[K], где K - целое число не больше 255. Так определяются строки с длиной не больше K. Этот тип уже не является стандартным. С символами строки можно работать как с элементами массива из символов, но в отличие от массивов, строки можно вводить целиком, сравнивать друг с другом и сцеплять операцией "+". ПРИМЕР: Работа со строками. var s,x,y,z:string; begin x:='turbo'; y:='pascal'; z:=x+' '+y; { z='turbo pascal' } s:=''; { пустая строка } for c:='a' to 'z' do s:=s+c; { s='abcd..xyz' } writeln(s); end. Сравнение строк выполняется посимвольно в соответствии с их кодами до первого несовпадения. Если одна из строк закончилась до первого несовпадения, то она считается меньшей. Пустая строка меньше любой строки. ПРИМЕР: Сравнение строк. 'abcd' > 'abcD' { 'd'>'D' } 'abcd' > 'abc' { 'd'>'' } 'abc' < 'axxc' { 'b'<'x' } 'abcd' = 'abcd' Существует ряд стандартных функций и процедур для работы со строками.
Турбо паскаль позволяет производить преобразования числовых значений в строковые и наоборот. Для этого используются процедуры Str(X:n:d,S) и Val(S,X,e). Первая получает их числа X строку S с изображением этого числа, в которой не менее n символов и из них d знаков после запятой. Параметры n и d необязательные. Вторая процедура получает из строки S число X. При успешном результате e=0. Задача 1. Из заданной строки выделить подстроку длиной 6 знаков (либо до конца строки, если осталось меньше), которая начинается с первой встретившейся в строке, буквы ‘f’. Распечатать эту подстроку или выдать сообщение, что ее нет. Решение: Var s,s1:string; k:integer; Begin Readln(s); k:=Pos('f', s); If k=0 then writeln(‘Такой подстроки нет’) Else begin S1:=copy(s,k,6); writeln(s1);end; End.
Алгоритм подсчета количества заданного символа в строке: Var s:string; c:char; k, i: integer; begin Readln(s); read(c); k:=0; for i:=1 to length(s) do if s[i]=c then k:=k+1; Writeln(k); End. Алгоритм удаления всех пробелов в строке: Var s:string; i: integer; begin Readln(s); i:=1; While i<= length(s) do begin if s[i]=‘ ‘ then delete(s,i,1) else i:=i+1; End; Writeln(s); End. Алгоритм поиска в строке подстроки длины k и подсчета количества: Var s, s1:string; k, i: integer; begin Readln(s); readln(s1); k:=length(s1); for i:=1 to length(s)-k do if copy(s, i,k)=s1 then k:=k+1; Writeln(k); End. Алгоритм просмотра строки по словам: Readln(s); S:=s+' '; repeat k:=pos(' ',s); c:=copy(s,1,k-1); If {условие на с} then writeln(c); delete(s,1,k); until s=''; Задача 2. Вводится текст, состоящий из слов, между которыми пробел. Поменяйте местами первое и последнее слово. Решение: Определим первое слово k:=Pos(' ', s); S1:=copy(s,1, k-1); Определим последнее слово i:=length(s); While s[i]<>' ' do i:=i+1; S2:=copy(s, i+1, length(s)-i); Поменяем местами слова Delete(s,i+1, length(s)-i); Delete (s, 1, k-1); S:=s2+s+s1; Задача 3. Вводится строка. Найдите все слова, содержащие букву «е». Решение: Рассмотрим подзадачу проверки содержит ли слово заданную букву. Реализуем решение подзадачи в виде подпрограммы-функции: function yes(a:string):boolean; var i: integer; Begin for i:=1 to length(a) do if a[i]='e' then yes:=true else yes:=false; end; Решим основную задачу поиска всех слов, содержащих букву «е» Readln(s); S:=s+' '; repeat k:=pos(' ',s); c:=copy(s,1,k-1); If yes(c) then writeln(c); delete(s,1,k); until s=''; Алгоритм просмотра строки по словам: Readln(s); S:=s+' '; repeat k:=pos(' ',s); c:=copy(s,1,k-1); If {условие на с} then writeln(c); delete(s,1,k); until s=''; Задача 4. Подсчитайте, сколько в заданном тексте содержится слов палиндромов. Алгоритм решения:
program z4; var x,y:string; i,j,k,l:integer; f:boolean; function per(s:string):boolean; var c:string; k,l,i:integer; begin c:=''; for i:=length(s) downto 1 do begin c:=c+s[i];end; if s=c then per:=true else per:=false; end; begin writeln(‘введи строку’); readln(x); x:=x+' '; repeat k:=pos(' ',x); c:=copy(x,1,k-1); If per(c) then l:=l+1; delete(x,1,k); until x=''; end. Задача 5. Вводится строка. Найдите все слова, начинающиеся с заглавной буквы. Решение: В кодировочной таблице сначала располагаются заглавные буквы, затем строчные. Коды заглавных букв располагаются от 65 до 90 или от 192 до 223. Readln(s); S:=s+' '; repeat k:=pos(' ',s); c:=copy(s,1,k-1); n:=ord(c[1]); If (n>=65) and (n<=90) or (n>=192) and (n<=223) then writeln(c); delete(s,1,k); until s=''; |
Обратная связьЗадачи для самостоятельной работы
|