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
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
answered Feb 26, 2014 at 16:45
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
Раздел: Стандартные функции Паскаля
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Функция 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
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: 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 Метки нет (Все метки)
Скажите что за фигня, пишу:
Проверяю работает только если ввожу например Инфа ты прогамма то ответа нужного не получаю, скажите как исправить?
0 |
ildwine Супер-модератор 6138 / 2880 / 1299 Регистрация: 04.03.2013 Сообщений: 5,746 Записей в блоге: 1 |
||||
26.01.2015, 19:01 |
2 |
|||
Сообщение было отмечено Памирыч как решение РешениеНапример так:
Добавлено через 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 |
|||
Сообщение было отмечено Алеекс как решение Решение
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 |
|||
Ёмаё всёрвно не хочет, пишу
компилирую, ввожу Инфа ты бот? не хочет!!!! Помогите плиз…
0 |
Puporev Почетный модератор 64285 / 47584 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
28.01.2015, 17:02 |
8 |
|||
Сообщение было отмечено Алеекс как решение Решение
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-ой позиции.