lektsia_5(работа со строками).ppt
- Количество слайдов: 18
Организация работы со строками Строки, как частный случай массивов
Тип String VAR Str 1: STRING; Str: STRING[20];
Типы строк • Short. String • Ansi. String • Wide. String Unicodе • PChar C C 0 1 2 3 … L L C C 0 ANSI, L <=255 L 1 2 3 4 … L L 0 1 2 C C … C L C … C C L+3 … 3 L L C C 0 • PWide. Char C 1 2 3 4 C C 0 1 2 3 … … … C C C C 2 L #0 #0
Пример работы с ANSIString var string 1, string 2 : Ansi. String; begin // Присвоение предложения первой строке string 1 : = 'Hello World'; // Присвоение второй строке значения путем указания string 2 на string 1 // Число ссылок на строку 'Hello World' равно 2 string 2 : = string 1; //Разъединение string 1 и string 2 : = string 2 + ', how is everyone? '; //Длина первой строки 5 Set. Length(string 1, 5); writeln('String 1 = '+string 1); writeln ('String 2 = '+string 2); end; String 1 = Hello String 2 = Hello World, how is everyone?
В модулях System, Sys. Utils, Strings определены методы для обработки строк Функциональное назначение методов: Создание и удаление строк. Копирование и объединение. Длина и позиционирование. Представление строки. Преобразования строки в иной тип. Преобразования иного типа в строку. Сравнение строк.
Средства модуля System VAR Words: STRING; BEGIN Write ('Введите, пожалуйста, слово: '); Вызов Описание Read. Ln (Words); Length(S) Длина строки S Words : = 'Фирма Microsoft'; Write. Ln ('Это слово состоит из ', Length (Words): 3, ' букв!'); FOR i : = 1 TO Length (Words) DO Words : = 'картографирование'; END. Up. Case(S) Cтрока S в верхнем регистре Words[i] : = Up. Case (Words[i]); Words : = 'Электрификация'; Write. Ln(Words); {Выводится текст Search_Word : = 'кац'; Word 1 : = Copy(Words, 6, 4); Copy(S, I, Count) Копирует Count символов строки S с номера I. 'Фирма MICROSOFT'} Position : = Pos(Search_Word, Words); Write. Ln(Word 1); {На экран выводится 'граф'} IF Position <> 0 THEN Pos(S 1, S 2) Позиция подстроки S 1 в строке S 2 Word 2 : = Copy(Words, 2, 3); Words : = 'компьютеризация'; Write. Ln ('Фрагмент "', Search_Word, '" содержится', ' в слове "', Write. Ln(Word 2); {На экран выводится 'арт'} Delete(Words, 1, 7); Insert(S 1, S 2, I) Ввести подстроку S 2 в строку S 1, начиная с позиции I. Words, '", начиная с позиции ', Position: 3, '. ') Delete(Words, 3, 2); ELSE Word 1 : = 'Г'; Delete(S, I, C) Удаляет С символов строки S с номера I. Write. Ln ('Фрагмент "', Search_Word, "' не содержится ', Insert(Word 1, Words, 1); Concat(S 1, S 2, SN) Конкатенация строк S 1, S 2 …SN. ' в слове "', Words, '". '); Word 1 : = 'не'; S 1: =‘пар’; Insert(Word 1, Words, 3); { Words=Генерация} Lower. Case(S) S 2: =‘о’; Строка S в нижнем регистре. S 3: =‘воз’; x: =123. 45; Str(X; S) Val(Str, Val, Code); Преобразовать число X в строку S. S 1: =Concat(s 1, s 2, s 3); Str(x: 7: 3, Str); Writeln(Val); // Ответ 1. 2345000000 E+02 Val(S, V, C) Преобразует строку S в число V. При ошибке в C Val(’ 123 Z’, Val, Code); // Строка => число с ошибкой writeln(Str); // Ответ 123. 450 (3 дробных позиции) Substr: =String. Of. Char(‘A’, 4); заносится номер ошибочного символа строки S. writeln(Val , Code); // Ответ 4 – номер позиции с ошибкой// Подстрока Substr = ‘AAAA’ Str(x, Str); writeln(S); // Ответ 1. 2345000000 E+02 String. Of. Char(c, count) Строка из count символов C
Средства модуля Sys. Utils Вызов Действие Int. To. Str(V). Превращает целое число V в строку. Str. To. Int(S) Превращает строку S в целое число. Str. To. Float(S) Превращает строку S в число. Float. To. Str(V) Превращают число V в строку. Float. To. Str. F(V, Format) Format : ffcurrency – денежный, ff. Exponent – научный, ff. Fixed – фиксированный, ff. General – обобщенный, с самым коротким результатом, ff. Number – фиксированный с разделителями тысяч Превращают число V в строку, используя формат вывода Format S: =Float. To. Str(V, ff. Fixed, 6, 3); // Число => строка с форматом writeln(S); // Ответ 123. 450
Строка , как частный случай массива Var s: array [1. . 10] of char; Str 1: string[10]; Str 2: string[5]; Begin Str 1: =‘Это строка’; Str 2: =‘Пример’; S: =str 1; // s[1]=‘Э’, s[2]=‘т’, s[3]=‘о’, … , s[10]=‘a’ S: =str 2; // s[1]=‘П’, s[2]=‘р’, s[3]=‘и’, … , s[10]=‘#0’
Определить, является ли строка палиндромом. Палиндром – это число, слово или фраза, одинаково читающиеся в обоих направления. Рада. Р, Топо. Т, Пото. П var s: string; i: byte; flag: boolean; begin write('String: '); readln(s); flag : = true; for i : = 1 to length(s) div 2 do if s[i] <> s[length(s)-i+1] then begin writeln('No palindrome'); flag : = false; break; end; if flag then write('Palindrome'); readln end.
Найти в строке определенную последовательность символов и заменить ее другой. var s, s_old, s_new: string; i, l_old: byte; begin write(‘Исходная строка: '); // я изучаю Turbo Pascal readln(s); write(‘Что заменить? '); //Тurbo readln(s_old); l_old : = length(s_old); write(‘Чем заменить? '); //Free readln(s_new); i : = pos(s_old, s); delete(s, i, l_old); insert(s_new, s, i); writeln(s); // я изучаю Free Pascal end.
Выделить из строки целые числа и поместить их в массив. var arr: array[1. . 100] of string; i, j: integer; strinput, str: string; a: char; n: byte; begin i : = 1; j : = 1; str: =‘’; readln(strinput); //abc 56 de 7 ff 15 n : = length(strinput); //15 while i <= n do begin a : = strinput[i]; while (a >= '0') and (a <= '9') do begin str : = str + a; i : = i + 1; a : = strinput[i] end; i : = i + 1; if str <> '' then begin arr[j] : = str; j : = j + 1; str : = '‘; end; for i : = 1 to j - 1 do write(arr[i]: 6); // 56 7 15 end.
Оставить в строке только один экземпляр каждого встречающегося символа. var s 1, s 2, s 3: string; i: byte; begin write('String: '); // adc hghj fgc yugl aa readln(s 1); s 2 : = ''; for i: =1 to length(s 1) do begin s 3 : = copy(s 1, i, 1); if pos(s 3, s 2) = 0 then s 2 : = s 2 + s 3 end; writeln('String: ', s 2); readln end.
Необходимо сформировать из встречающихся в предложении слов их массив. При этом повторяющиеся слова не должны входить в массив дважды. var u, w: string; i, j, q: integer; ws: array[1. . 100] of string; : string; len: integer; begin writeln('Введите текст: '); read(u); len : = length(u); i : = 1; q: =0; while i <= len do if (lowercase(u[i]) >= 'a') and (lowercase(u[i]) <= 'z') then begin w : = lowercase(u[i]); i : = i + 1; while (i <= len) and ((lowercase(u[i]) >= 'a') and (lowercase(u[i]) <= 'z')) do begin w : = w + lowercase(u[i]); i : = i + 1; end; j : = 1; while (j <= q) and (w<>ws[j]) do j : = j + 1; if j > q then begin q : = q + 1; ws[q] : = w; end; end else i : = i + 1; for i : = 1 to q do writeln(ws[i]); end.
Удалить в строке все лишние пробелы. Лишними считаются пробелы, следующие непосредственно за пробелами. Т. е. между словами всегда должен находиться один пробел
Средства модуля String Вызов Действие Str. New(S) Создать строку S. Str. Dispose(S); Удалить строку S. Str. Copy(Dest, Source) Копирует в строку Dest строку Source. Str. LCopy(Dest, Source, Копирует в строку Dest строку Source с ограничением в Max. Len) Max. Len числа символов в Dest. Str. Move(Dest, Source, Count) Копирует в строку Dest из строки Source Count символов с заменой. Str. Cat(Dest, Sourcе) Присоединяет к строке Dest копию строки Source. Str. LCat(Dest, Source, Max. Len) Присоединяет к строке Dest копию строки Source. Число символов в результирующей строке не больше Max. Len. Str. Copy(Dest, Source) Копирует в строку Dest строку Source. Str. LCopy(Dest, Source, Копирует в строку Dest строку Source с ограничением в Max. Len) Max. Len числа символов в Dest.
Str. Len(Str: p. Char) Возвращает длину строки без учета символа с кодом #0. Str. End(Str: p. Char) Возвращает указатель на конец строки. Str. Pos(Str 1, Str 2) Возвращает указатель на начало первого появления строки Str. Scan(Str, Chr) Str. RScan(Str, Chr) Str 2 в Str 1 Возвращает указатель на первое появление символа Chr в строке Str. Возвращает указатель на последнее появление символа Chr в строке Str. Lower(Str) Перевод строчных букв в прописные (только латинские). Str. Upper(Str) Перевод прописных букв в строчные (только латинские). Str. Pas(Str) p. Char -> string. Str. PCopy(Dest, Source) string -> p. Char. Str. Comp(Str 1, Str 2) Сравнивает строки. Возвращается: число < 0, если Str 1<Str 2, Str. IComp(Str 1, Str 2) 0, если Str 1=Str 2, число > 0, если Str 1>Str 2. То же, но игнорируется разница в высоте латинских букв. Str. LComp(Str 1, Str 2, Max. Len)Подобна Str. Comp, но сравниваются первые Max. Len символов.
uses Sys. Utils; var p 1, p 2, p 3, p: p. Char; s 1, s 2: string; Max. Len: word; begin p: =Str. New(’ 1234′); // Создать строку (аргумент не пустой) Str. Dispose(p); // Удалить строку p 1: =Str. New(‘AAAAAAAA’); p 2: =Str. New(’ 123456′); p 3: =Str. New(‘abcdef’); Str. Copy(p 1, p 2); // Копировать p 2 в p 1 s 1: =Str. Pas(p 1); // Преобразовать p 1 в s 1 для вывода writeln(s 1); // s 1 = 123456 Str. LCopy(p 1, p 2, 4); // Копировать p 2 в p 1 с ограничением длины writeln(Str. Pas(p 1)); // 1234 p 1: =Str. Move(p 1, p 3, 2); // Копирование из p 3 2 элементов в p 1 с заменой writeln(Str. Pas(p 1)); // ab 34 p 1: =Str. LCat(p 1, p 2, 8); // Дописать p 3 в p 1 с ограничением длины writeln(Str. Pas(p 1)); // ab 34 abcd End;
var p 1, p 2, p 4: p. Char; x: integer; begin p 1: =Str. New(‘ABC 123′); p 2: =Str. New(‘abc 123’); p 4: =Str. New(’ABC 456’); x: =Str. Comp(p 1, p 3); writeln(x); x: =Str. Comp(p 1, p 2); // p 1 < p 2 writeln(x); // x = -32 x: =Str. Comp(p 4, p 1); // p 4 > p 1 writeln(x); // x = 3 x: =Str. IComp(p 2, p 1); // p 2 = p 3 writeln(x); // x = 0 x: =Str. LComp(p 1, p 4, 3); // p 1 = p 4 writeln(x); // x = 0 x: =Str. LIComp(p 1, p 4, 4); // Сравнить p 1 и p 4 writeln(x); // x = -3 End;
lektsia_5(работа со строками).ppt