====== Всё о строках ====== FIXME Статья не окончена. Помогите дополнить её. ===== Введение ===== ==== Типы строк ==== * Cтроки (тип String) длиной до 255 символов. * Строки с завершающим нулём (Null-terminated/ASCIIZ strings), длиной до 65535 (216-1) символов. Описывается как ''Array Of Char''. ==== Операции над строками ==== [[string system procedures|Справка по процедурам и функциям операций над строками]] ===== Анализ и обработка текста ===== ==== Различные частоупотребляемые функции ==== === Проверка, являются ли все буквы в слове русскими/латинскими === Type TCharset = Set Of Char; Const CyrillicCharset : set of char = ['А'..'Я','а'..'п','р'..'я']; LatinCharset : set of char = ['A'..'Z','a'..'z']; function CheckAlphabet (Str: string; Charset: TCharset): boolean; var i: integer; begin i := 1; While (i <= Length (Str)) And (Str[i] In Charset) Do Inc (i); If i > Length (Str) Then CheckAlphabet := TRUE Else CheckAlphabet := FALSE end; var S: string; begin readln (S); WriteLn (CheckAlphabet(S,LatinCharset)) end. === Перекодировка === === Сумма Прописью === ==== Анализ текста и извлечение информации ==== === Поиск и сравнение строк по шаблону === === Извлечение слов из строки === Некоторый набор символов считается словом, если он состоит из символов алфавита (латинского или, допустим, кириллицы) и знака дефис. === Подсчёт слов в строке === Type TCharset = Set Of Char; Const CyrillicCharset : set of char = ['А'..'Я','а'..'п','р'..'я']; LatinCharset : set of char = ['A'..'Z','a'..'z']; function WordCount (S: string; Charset: TCharset): integer; var i, len, words: integer; PrevIsAlpha: boolean; { признак того, что предыдущий символ принадлежит набору алфавита } begin words := 0; PrevIsAlpha := FALSE; len := 0; for i := 1 to Length(S) do if NOT (S[i] in Charset) then { Если i-й символ строки НЕ принадлежит алфавиту (достигли конца слова) } begin if PrevIsAlpha AND (len>1) then { а предыдущий также принадлежит алфавиту и длина слова более 1 символа } inc (words); len := 0; PrevIsAlpha := FALSE end else begin inc (len); PrevIsAlpha := TRUE end; WordCount := words end; Использовать функцию так: writeln (WordCount ('function WordCount (S: string; Charset: TCharset): integer;', LatinCharset)) === Разделение строки на подстроки по заданному разделителю === === Определение частоты вхождений символа/подстроки === count := 0; { обнулить счётчик } for i := 1 to Length (str) do if str[i] = ch {символ} then inc (count); {count := count + 1 увеличить счётчик} ==== Поиск с учётом морфологии слов ==== ==== Регулярные выражения (regex, Regular Expressions) ==== [[wpru>Регулярные выражения]] помогают в сложных и простых случаях, когда необходимо найти или заменить вхождения символов по заданномуу шаблону. Применяя их, нет необходимости в сложных алгоритмах разбора строк на составные части, что значительно облегчает написание кода в программах. ===== Внешние ссылки ===== [[http://www.sources.ru/pascal/string/index.htm|Строковые Функции]] [[http://www.sources.ru/pascal/parsing/index.htm|Разбор и Анализ Строк]]