Всё о строках

FIXME Статья не окончена. Помогите дополнить её.

Введение

Типы строк

  • Cтроки (тип String) длиной до 255 символов.
  • Строки с завершающим нулём (Null-terminated/ASCIIZ strings), длиной до 65535 (216-1) символов. Описывается как Array Of Char.

Операции над строками

Анализ и обработка текста

Различные частоупотребляемые функции

Проверка, являются ли все буквы в слове русскими/латинскими

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)

Регулярные выражения помогают в сложных и простых случаях, когда необходимо найти или заменить вхождения символов по заданномуу шаблону. Применяя их, нет необходимости в сложных алгоритмах разбора строк на составные части, что значительно облегчает написание кода в программах.

Внешние ссылки

 
pascal/all_about_strings.txt · Последние изменения: 2009/11/24 12:07 От romtek
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki