Раздел: Стандартные функции Паскаля

Функция Pos

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Функция Pos в Паскале ищет подстроку в строке. Синтаксис функции имеет довольно много вариантов для разных типов данных:

function Pos(const substr : shortstring; 
             const s : shortstring) : SizeInt;

function Pos(C : Char;
             const s : shortstring) : SizeInt;

function Pos(const Substr : ShortString;
             const Source : AnsiString) : SizeInt;

function pos(const substr : shortstring;
             c : Char) : SizeInt;

function Pos(const Substr : AnsiString;
             const Source : AnsiString) : SizeInt;

function Pos(c : Char;
             const s : AnsiString) : SizeInt;

function Pos(const Substr : UnicodeString;
             const Source: UnicodeString) : SizeInt;

function Pos(c : Char;
             const s : UnicodeString) : SizeInt;

function Pos(c : UnicodeChar;
             const s : UnicodeString) : SizeInt;

function Pos(c : AnsiString;
             const s : UnicodeString) : SizeInt;

function Pos(c : UnicodeString;
             const s: AnsiString) : SizeInt;

function Pos(c : ShortString;
             const s : UnicodeString) : SizeInt;

function Pos(const Substr : WideString;
             const Source : WideString) : SizeInt;

function Pos(c : Char;
             const s : WideString) : SizeInt;

function Pos(c : WideChar;
             const s : WideString) : SizeInt;

function Pos(c : WideChar;
             const s : AnsiString) : SizeInt;

function Pos(c : AnsiString;
             const s : WideString) : SizeInt;

function Pos(c : WideString;
             const s : AnsiString) : SizeInt;

function Pos(c : ShortString;
             const s : WideString) : SizeInt;

function Pos(c : Char;
             const v : Variant) : SizeInt;

function Pos(s : ShortString;
             const v : Variant) : SizeInt;

function Pos(a : AnsiString;
             const v : Variant) : SizeInt;

function Pos(w : WideString;
            const v : Variant) : SizeInt;

function Pos(w : UnicodeString;
             const v : Variant) : SizeInt;

function Pos(v : Variant;
             const c: Char) : SizeInt;

function Pos(v : Variant;
             const s : ShortString) : SizeInt;

function Pos(v : Variant;
             const a : AnsiString) : SizeInt;

function Pos(v : Variant;
             const w : WideString) : SizeInt;

function Pos(v : Variant;
             const w : UnicodeString) : SizeInt;

function Pos(v1 : Variant;
             const v2 : Variant) : SizeInt;

Вся эта куча вариантов взята из документации. Так что просьба не критиковать за излишние подробности )))

Функция Pos возвращает индекс подстроки Substr в строке S, если строка S содержит в себе подстроку Substr. Если подстрока Substr не найдена в строке, то функция возвращает 0. Поиск чувствителен к регистру.

Как найти подстроку в строке

Разумеется, сделать это можно без использования специальных функций.

Проще всего найти в строке символ - это можно сделать простым перебором символов в строке.

Найти вхождение подстроки из нескольких символов будет сложнее. Но тоже возможно - существуют специальные алгоритмы.

Однако зачем “изобретать велосипед”, если есть готовые функции. Такие, например, как функция Pos.

С помощью этой функции можно найти символ или подстроку в строке.

Как часто приходится это делать? Зависит от специфики вашей работы.

Если вы работаете, например, с математикой, то почти никогда.

Если же вы работаете с большими объёмами текстовой информации, с файлами, то довольно часто.

Итак, пример:

S := 'abcdefgcde';
Writeln(Pos('f', S));     //Pos = 6
Writeln(Pos('F', S));     //Pos = 0 - буква F не найдена
Writeln(Pos('cde', S));   //Pos = 3, потому что функция 
                          //возвращает индекс первого 
                          //найденного вхождения
Writeln(Pos('cdf', S));   //Pos = 0 - такой подстроки нет

В принципе, здесь всё понятно. Особых разъяснений не требуется.

Единственное замечание по варианту поиска подстроки cde. Как видите, в исходной строке есть две подстроки cde. Но функция возвращает число 3, то есть индекс первого элемента первой найденной подстроки.

Пример программы:

program posfunc;

var S : string;

begin
//Ищем индекс первого пробела в строке
  S := 'The first space in this sentence is at position : ';
  Writeln(S, Pos(' ', S));  //Pos = 4

//Ищем последнюю букву английского алфавита в строке
  S := 'The last letter of the alphabet doesn''t appear in this sentence ';
  //Так как такой буквы в строке нет, то будет выведено сообщение об этом
  if (Pos('Z', S) = 0) and (Pos('z', S) = 0) then
    Writeln(S);

//Проверяем, что функция Pos действительно чувствительна к регистру
  S := 'abcdefgcde';
  Writeln(Pos('f', S));     //Pos = 6
  Writeln(Pos('F', S));     //Pos = 0 - буква F не найдена
  Writeln(Pos('cde', S));   //Pos = 3, потому что функция 
                            //возвращает индекс первого 
                            //найденного вхождения
  Writeln(Pos('cdf', S));   //Pos = 0 - такой подстроки нет

  ReadLn;
end. 

Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика