Подстрока

Поделись знанием:
Перейти к: навигация, поиск




В информатике подстрока — это непустая связная часть строки.

Формальное определение

Пусть <math>L=c_0\dots c_{n-1}</math> — строка длины <math>n</math>.

Любая строка <math>S=c_i\dots c_j</math>, где <math>0\le i\le j\le n-1</math>, является подстрокой <math>L</math> длины <math>j-i+1</math>.

  • Если <math>i=0</math>, то <math>S</math> называется префиксом <math>L</math> длины <math>j+1</math>.
  • Если <math>j=n-1</math>, то <math>S</math> — суффикс <math>L</math> длины <math>j-i+1</math>.

Пример

С точки зрения информатики строки «кипед», «Вики», «дия» являются подстроками строки «Википедия»; при этом «Вики» — префиксом, а «дия» — суффиксом.

Википедия
|||||||||
||кипед||
||||  |||
Вики  |||
      дия

Получение подстроки

Если line — исходная строка, begin — индекс первого символа подстроки, end — индекс последнего символа подстроки, то подстрока subline вычисляется следующим образом:

В языке C

char* subline = ( char* )malloc( end - begin + 2 );
memcpy( subline, line + begin, end - begin + 1 );
subline[ end - begin + 1 ] = '\0';

В языке Python

subline = line[begin:end + 1]

В языке python подстрока является слайсом (срезом) (англ. slice).

В языке Perl

my $subline = substr $line, $begin, $end - $begin + 1;

В языке PHP

$subline = substr($line, $begin, $end - $begin + 1);

В языке Pascal

subline := Copy(line, begin, end - begin + 1);

В языке Ruby

substr = line[start..stop]

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

Помимо простой задачи выделения подстроки из строки по двум индексам существует и более сложная задача поиска индексов, указывающих на заданную подстроку в строке (поиск вхождения подстроки в строку).

См. также


Напишите отзыв о статье "Подстрока"

Отрывок, характеризующий Подстрока

– Дай ка сюда это письмо, – сказал Кутузов, обращаясь к князю Андрею. – Вот изволите видеть. – И Кутузов, с насмешливою улыбкой на концах губ, прочел по немецки австрийскому генералу следующее место из письма эрцгерцога Фердинанда: «Wir haben vollkommen zusammengehaltene Krafte, nahe an 70 000 Mann, um den Feind, wenn er den Lech passirte, angreifen und schlagen zu konnen. Wir konnen, da wir Meister von Ulm sind, den Vortheil, auch von beiden Uferien der Donau Meister zu bleiben, nicht verlieren; mithin auch jeden Augenblick, wenn der Feind den Lech nicht passirte, die Donau ubersetzen, uns auf seine Communikations Linie werfen, die Donau unterhalb repassiren und dem Feinde, wenn er sich gegen unsere treue Allirte mit ganzer Macht wenden wollte, seine Absicht alabald vereitelien. Wir werden auf solche Weise den Zeitpunkt, wo die Kaiserlich Ruseische Armee ausgerustet sein wird, muthig entgegenharren, und sodann leicht gemeinschaftlich die Moglichkeit finden, dem Feinde das Schicksal zuzubereiten, so er verdient». [Мы имеем вполне сосредоточенные силы, около 70 000 человек, так что мы можем атаковать и разбить неприятеля в случае переправы его через Лех. Так как мы уже владеем Ульмом, то мы можем удерживать за собою выгоду командования обоими берегами Дуная, стало быть, ежеминутно, в случае если неприятель не перейдет через Лех, переправиться через Дунай, броситься на его коммуникационную линию, ниже перейти обратно Дунай и неприятелю, если он вздумает обратить всю свою силу на наших верных союзников, не дать исполнить его намерение. Таким образом мы будем бодро ожидать времени, когда императорская российская армия совсем изготовится, и затем вместе легко найдем возможность уготовить неприятелю участь, коей он заслуживает».]