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

I tried the following code which supposed to check if a string contains spaces but I get an error.
How else can I check that

if Index('some string',' ')>1 then begin
   Result:= False;
 end
 else begin
      Result := True;  
 end;

asked Feb 26, 2014 at 16:39

user1016179's user avatar

1

You can use pos function. From documentation:

The pos function returns the position of a substring in a main string.
If the substring does not exist in the main string, then the returned
value will be 0.

s:='note-book';
x:=pos('book',s); {x will be 6}

All this information, and other useful tips you can find here

Andrew Truckle's user avatar

answered Feb 26, 2014 at 16:45

Farkhat Mikhalko's user avatar

Farkhat MikhalkoFarkhat Mikhalko

3,5253 gold badges23 silver badges36 bronze badges

2

As an alternative one, AnsiContainsStr can be used for string containing operations.It return True if the string contains the given substring, False otherwise. As an example code:

if AnsiContainStr(mainText, subText) then begin
   //enter here if mainText contains subText.
   //write code for doing needed operations here
end

answered Feb 11, 2016 at 12:09

Mustafa Kemal's user avatar

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

Основы программирования 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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

Алеекс

2 / 2 / 1

Регистрация: 23.10.2014

Сообщений: 55

1

Определение вхождения подстроки в строку

26.01.2015, 18:31. Показов 8238. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Скажите что за фигня, пишу:

Pascal
1
if pos(a1,'Инфа ')=1 then begin //ну и там дальше не важно

Проверяю работает только если ввожу например Инфа ты прогамма то ответа нужного не получаю, скажите как исправить?



0



ildwine

Супер-модератор

6138 / 2880 / 1299

Регистрация: 04.03.2013

Сообщений: 5,746

Записей в блоге: 1

26.01.2015, 19:01

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Например так:

Pascal
1
2
3
4
5
6
7
var
  a1 : string;
begin
  write('строка: '); readln(a1);
  a1 := ' ' + a1 + ' ';
  if pos(' инфа ', a1)  <> 0 then writeln('YES') else writeln('NO')
end.

Добавлено через 1 минуту
Но это без учета регистра и без разделителей… Только пробелы разделяют слова…



0



5056 / 2630 / 2345

Регистрация: 10.12.2014

Сообщений: 9,993

27.01.2015, 07:52

3

Всё дело в „=1“…
Это значит, что подстрока „Инфа“ входит с строку только с первой позиции!



0



Puporev

Почетный модератор

64285 / 47584 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

27.01.2015, 08:15

4

Лучший ответ Сообщение было отмечено Алеекс как решение

Решение

Pascal
1
if pos('Инфа ',a1)>0 then begin



0



2 / 2 / 1

Регистрация: 23.10.2014

Сообщений: 55

27.01.2015, 12:33

 [ТС]

5

О, спасибо ребят, помогли, а то просто во всех учебниках говорится, что только 0 или 1 (ну это же boolean); СПАСИБО.



0



Почетный модератор

64285 / 47584 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

27.01.2015, 12:35

6

pos(‘Инфа ‘,a1) может быть не только 0 или 1, а и 20 и 200…



0



Алеекс

2 / 2 / 1

Регистрация: 23.10.2014

Сообщений: 55

28.01.2015, 16:48

 [ТС]

7

Ёмаё всёрвно не хочет, пишу

Pascal
1
2
if pos(a1,'Инфа ')>0 then begin 
delete(a1,i,length('Инфа ')); Writeln(a1,' на ',f1[random(34+1)]); end;

компилирую, ввожу Инфа ты бот? не хочет!!!! Помогите плиз…
Если пишу просто Инфа. то всё в норме…



0



Puporev

Почетный модератор

64285 / 47584 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

28.01.2015, 17:02

8

Лучший ответ Сообщение было отмечено Алеекс как решение

Решение

Цитата
Сообщение от Алеекс
Посмотреть сообщение

if pos(a1,’Инфа ‘)>0

Да с какого угару так, разве у меня так написано? Первым параметром указывается подстрока, а вторым строка

Pascal
1
if pos('Инфа',a1)>0



0



2 / 2 / 1

Регистрация: 23.10.2014

Сообщений: 55

28.01.2015, 17:24

 [ТС]

9

Упс… ВСЁ ещё раз СПС.



0




Содержание

  • 1. Функция StrEnd. Получить указатель на последний нулевой символ строки
  • 2. Функция StrLen. Получить длину строки
  • 3. Функция StrPos. Поиск первого вхождения подстроки в строке
  • 4. Функция StrScan. Поиск первого вхождения заданного символа в строке
  • 5. Функция StrRScan. Поиск последнего вхождения заданного символа в строке
  • Связанные темы

Поиск на других ресурсах:

1. Функция StrEnd. Получить указатель на последний нулевой символ строки

Функция StrEnd возвращает указатель на символ ‘’, завершающий строку. Объявления функции для типов PAnsiChar и PWideChar следующие

function StrEnd(const Str: PAnsiChar): PAnsiChar;
function StrEnd(const Str: PWideChar): PWideChar;

здесь

  • Str – строка, для которой нужно установить указатель на последний символ.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  ps2 : PWideChar;

begin
  // Функция StrEnd

  // 1. Исходная строка
  ps1 := StrNew('Hello, world!');

  // 2. Создать новую строку
  ps2 := StrNew(ps1);

  // 3. Скопировать 5 символов строки ps1 => ps2
  StrLCopy(ps2, ps1, 5); // ps2 = 'Hello'

  // 4. Установить указатель на последний нулевой символ строки ps2
  ps3 := StrEnd(ps2);

  // 5. Прибавить три символа !
  StrCat(ps3, '!!!');

  // 6. Вывести строку ps2
  Writeln('ps2 = ', StrPas(ps2)); // ps2 = 'Hello!!!'

  Readln;
end.

Результат

ps2 = Hello!!!

 

2. Функция StrLen. Получить длину строки

Функция StrLen возвращает количество символов в строке без учета символа ‘’ конца строки. Спецификация функции имеет вид

function StrLen(const Str: PAnsiChar): Cardinal;
function StrLen(const Str: PWideChar): Cardinal;

здесь

  • Str – строка, длину которой нужно определить.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  length : Integer;

begin

  // Функция StrLen - получить длину строки

  // 1. Заданная строка
  ps1 := StrNew('bestprog');

  // 2. Определить длину строки
  length := StrLen(ps1);

  // 3. Вывести длину на экран
  Writeln('StrLen(bestprog) = ', length);

  Readln;
end.

Результат

StrLen(bestprog) = 8

 

3. Функция StrPos. Поиск первого вхождения подстроки в строке

Функция StrPos производит поиск подстроки в строке. Объявление функции для типов PAnsiChar и PWideChar следующее

function StrPos(const Str1, Str2: PAnsiChar): PAnsiChar;
function StrPos(const Str1, Str2: PWideChar): PWideChar;

здесь

  • Str1 – строка, в которой осуществляется поиск;
  • Str2 – подстрока, которую нужно найти в строке Str1.

Если подстрока найдена, то функция возвращает указатель на первое вхождение этой подстроки. Если подстрока не найдена, то функция возвращает nil.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  ps3 : PAnsiChar;

begin
  // Функція StrPos

  // 1. Исходная строка
  ps1 := 'ABCDEF ABCDEFG';

  // 2. Исходная подстрока
  ps2 := 'DE';

  // 3. Найти подстроку ps2 в строке ps1
  // 3.1. Вызов StrPos
  ps3 := StrPos(ps1, ps2); // ps3 => 'DEF ABCDEFG'

  // 3.2. Вывести результат
  if ps3 = nil then
    Writeln('Substring ps2 is not in the string ps1')
  else
    Writeln(StrPas(ps3));

  // 4. Найти подстроку 'JKLMN' в строке ps1
  // 4.1. Вызов StrPos
  ps3 := StrPos(ps1, 'JKLMN');

  // 4.2. Вывести результат
  if ps3 = nil then
    Writeln('Substring ps2 is not in the string ps1')
  else
    Writeln(StrPas(ps3));

  Readln;
end.

Результат

DEF ABCDEFG
Substring ps2 is not in the string ps1

 

4. Функция StrScan. Поиск первого вхождения заданного символа в строке

Функция StrScan используется для поиска первого вхождения заданного символа в строке. Для типов PAnsiChar и PWideChar функция имеет следующее объявление

function StrScan(const Str: PAnsiChar; Chr: AnsiChar): PAnsiChar;
function StrScan(const Str: PWideChar; Chr: WideChar): PWideChar;

здесь

  • Str – строка, в которой осуществляется поиск символа;
  • Chr – символ.

Если символ Chr находится в строке Str, то функция возвращает указатель на первое вхождение этого символа в строке. Если символ в строке не найден, функция возвращает nil.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  ps3 : PWideChar;
  ps4 : PWideChar;

begin
  // Функция StrScan - поиск первого вхождения заданного символа в строке

  // 1. Строка типа PAnsiChar
  // 1.1. Указать строку типа PAnsiChar
  ps1 := 'ABCDEF ABCDEFG';

  // 1.2. Найти первое вхождение символа 'F' в строке
  ps2 := StrScan(ps1, 'F');

  // 1.3. Вывести результат
  if ps2 = nil then
    Writeln('The character ''F'' is not in the string ps1')
  else
    Writeln('ps2 = ', ps2); // вывести остаток строки

  // 2. Строка типа PWideChar
  // 2.1. Указать строку типа PWideChar
  ps3 := StrNew('Hello, world!');

  // 2.2. Найти символ 'w' в строке
  ps4 := StrScan(ps3, 'w');

  // 2.3. Вывести результат
  if ps3 = nil then
    Writeln('The character ''w'' is not in the string ps1')
  else
    Writeln('ps4 = ', ps4); // ps4 = world!

  // 2.4. Освободить память, выделенную для ps3
  StrDispose(ps3);

  Readln;
end.

Результат

ps2 = F ABCDEFG
ps4 = world!

 

5. Функция StrRScan. Поиск последнего вхождения заданного символа в строке

Функция StrRScan, равно как и функция StrScan, находит символ в строке. Только поиск производится с конца, то есть функция находит последнее вхождение заданного символа в строке. Объявление функции для типов PAnsiChar и PWideChar следующее

function StrRScan(const Str: PAnsiChar; Chr: AnsiChar): PAnsiChar;
function StrRScan(const Str: PWideChar; Chr: WideChar): PWideChar;

здесь

  • Str – строка, в которой осуществляется поиск;
  • Chr – искомый символ.

Функция возвращает указатель на позицию найденного символа в строке. Если символа Chr в строке нет, функция возвращает nil.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  ps3 : PWideChar;
  ps4 : PWideChar;

begin
  // Функция StrRScan - поиск последнего вхождения заданного символа в строке

  // 1. Строка типа PAnsiChar
  // 1.1. Задать строку типа PAnsiChar
  ps1 := 'ABCDEF ABCDEFG';

  // 1.2. Найти последнее вхождение символа 'A' в строке
  ps2 := StrRScan(ps1, 'A');

  // 1.3. Вывести результат
  if ps2 = nil then
    Writeln('The character ''A'' is not in the string ps1')
  else
    Writeln('ps2 = ', ps2); // вывести остаток

  // 2. Строка типа PWideChar
  // 2.1. Задать строку типа PWideChar
  ps3 := StrNew('Hello, world!');

  // 2.2. Найти последнее вхождение символа 'o' в строке
  ps4 := StrRScan(ps3, 'o');

  // 2.3. Вывести результат
  if ps3 = nil then
    Writeln('The character ''o'' is not in the string ps1')
  else
    Writeln('ps4 = ', ps4); // ps4 = orld!

  // 2.4. Освободить память, выделенную для ps3
  StrDispose(ps3);

  Readln;
end.

Результат

ps2 = ABCDEFG
ps4 = orld!

 


Связанные темы

  • Реализация строк типа PChar в памяти компьютера. Типы PAnsiChar, PWideChar. Выделение памяти для строк. Доступ по индексу
  • Функции сравнения строк. Функции StrComp, StrIComp, StrLComp, StrLIComp
  • Функции, которые изменяют содержимое строки. Функции StrCat, StrLCat, StrLower, StrUpper, StrCopy, StrECopy, StrLCopy, StrMove
  • Тип String. Операции над строками символов
  • Функции работы со строками символов. Функции Concat, Copy, Delete, Insert, Length, Pos, Val, Str

 


Строки в Pascal

Строку в Паскале можно рассматривать как массив символов переменной длины. Работа со строками в Паскале довольно проста.

Простой пример: объявляем строку stroka, допустимая длина этой строки равна 10-ти символам

Получаем: Строки в Паскале

Максимальная длина строки в Паскале — 255 символов. Если при объявлении переменной типа строка не указать в квадратных скобках максимально допустимую длину, то по умолчанию длина строки равна 255-ти символам.

Длину строки в Паскале получаем с помощью функции Length:

Получаем: Длина строки в Паскале

длина строки «sbp» равна трём байтам.

Если строке присвоить значение, длина которого больше допустимой, то лишние символы будут удалены. Пример:

Получаем: Длина строки в Паскале

В этом примере строка может содержать не более двух символов, отсюда и результат.

Присоединить одну строку к другой в Паскале можно двумя путями: знаком «+» или функцией Concat.

Пример для «+»:

Получаем: Присоединить одну строку к другой в Паскале

Пример соединения строк в Паскале с помощью встроенной функции Concat:

Получаем результат ровно такой же, как и в предыдущем примере.

Вставка строки в другую строку в Паскале делается с помощью стандартной функции Insert. Рассмотрим пример, где в строку «sbp-gram» после черточки, здесь номер символа 5, вставляется строка «pro»:

В результате получим строку «sbp-program».

Скопировать часть строки в Паскале можно с помощью функции Copy. Скопируем из строки «sbp-program» 3 символа, начиная с символа с номером 5, т.е. с буквы «p» в слове «program»:

Получаем: Скопировать часть строки в Паскале

Найти подстроку в строке на Паскале можно с помощью функции Pos. Для примера берём строку «program» и найдём номер символа, с которого начинается первое вхождение строки «gram» в строку «program»:

В переменной «number» сохранится число 4. Если бы строка «gram» не встречалось в строке «program», то функция Copy вернула бы ноль.

Удалить подстроку из строки в Паскале можно с помощью стандартной функции Delete. Удалим первые три символа из строки «program»:

Получим «gram». Строкой Delete(stroka, 1, 3) мы дали команду удалить три символа из строки «stroka», начиная с 1-ой позиции.

Добавить комментарий