abelix 10 / 10 / 5 Регистрация: 30.11.2009 Сообщений: 119 |
||||
1 |
||||
Проверить наличие определенного символа в строке22.09.2010, 21:53. Показов 16490. Ответов 8 Метки нет (Все метки)
есть ли функция которая проверяет есть ли такой-то символ в строке ну что то вроде
0 |
Puporev Почетный модератор 64286 / 47585 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
22.09.2010, 21:55 |
2 |
|||
Есть. pos(pdstr,str);
2 |
10 / 10 / 5 Регистрация: 30.11.2009 Сообщений: 119 |
|
22.09.2010, 22:03 [ТС] |
3 |
а как на счет масивов с числами ,нужно ли создавать цикл или есть похожая функция
0 |
Почетный модератор 64286 / 47585 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.09.2010, 22:09 |
4 |
Для числовых или символьных массивов(вообще для любых массивов) такой нет, нужно организовывать поиск. Поэтому строки в Паскале удобная вещь. Добавлено через 1 минуту
0 |
10 / 10 / 5 Регистрация: 30.11.2009 Сообщений: 119 |
|
22.09.2010, 22:20 [ТС] |
5 |
для числовых,но это не важно так как нужно все таки организовывать цикл
0 |
Почетный модератор 64286 / 47585 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.09.2010, 22:21 |
6 |
abelix, Я же написал, для любых массивов нет такой функции.
0 |
Posik 11 / 10 / 4 Регистрация: 31.08.2010 Сообщений: 187 |
||||
22.09.2010, 23:21 |
7 |
|||
0 |
Puporev Почетный модератор 64286 / 47585 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
23.09.2010, 07:38 |
8 |
|||
Posik, Лишь бы что-то ляпнуть? Вы что считаете что ваш код лучше чем
А речь как раз идет о стандартных функциях, а не о самопальных циклах.
0 |
11 / 10 / 4 Регистрация: 31.08.2010 Сообщений: 187 |
|
23.09.2010, 18:08 |
9 |
Всё я в обиде …)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.09.2010, 18:08 |
9 |
Раздел: Стандартные функции Паскаля
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Функция 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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |
Содержание
- 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
⇑
По своей сути строки в паскале представляют собой одномерные массивы символов.
Для объявления переменной вида «строка» используется тип string , для символов – char .
Максимальная длина строки составляет 255 символов. Если вам необходимы для работы более короткие строки, то их длину в квадратных скобках указывают при описании переменной типа string . Если длина не указана, то по умолчанию ее длина будет максимально возможной, т.е. 255 символов.
Var s : string; s1 : string [10]; c : char;
Объявлены переменные типа «строка»: s – длиной 255 символов и s1 длиной 10 символов.
Переменная c – типа «символ».
Для присвоения значения типа строка переменной используются апострофы.
S :=’Привет, мир!’;
Для присвоения «нулевого» значения переменной типа «строка» используются два апострофа подряд, что означает, что в строке нет символов.
S :=’’;
У каждого символа в строке, как у элемента одномерного массива, есть индекс. Со строкой и ее символами можно работать, как с одномерным массивом.
S[ 10]:=’ э’;
Write ( s );
Выведет на экран: Привет, мэр!
Для соединения нескольких строк в одну используется “+ ” либо Concat (s1, s2,…,sn)
Например, последовательность команд
s1:=’ Привет’;
s2:=’, ‘;
s3:=’ мир ! ‘;
write (s1+s2+s3);
write (concat(s1,s2,s3));
Выведет на экран: Привет, мир ! Привет, мир !
Чтобы выделить подстроку из строки используется функция Copy (S, poz, n) , где S – строка, из которой, начиная с позиции poz , копируем подстроку, состоящую из n символов.
s1:=’Привет, мир!’;
write (copy(s1,9,3)); // выделить подстроку, начиная с 9 позиции, длиной 3 символа
Выведет на экран: мир
Для поиска в строке подстроки используется функция Pos (subS, S) , которая определяет с какой позиции подстрока subS входит в строку S (возвращает целое число, равное индексу в строке первого символа искомой подстроки). Если искомой подстроки не обнаружено, то функция вернет 0.
Например:
s :=’Привет, мир!’;
write ( pos (‘мир’,s )); // найти с какой позиции в строке находятся символы ‘мир’
Выведет на экран: 9
s:=’Привет, мир!’;
write (pos(‘ мэр’,s));
Выведет на экран: 0
Для определения длины строки (количества символов в строке) используется функция Length(s).
Например:
s:=’Привет,мир!’;
write (Length(s));
Выведет на экран: 12
s:=”;
write (Length(s));
Выведет на экран: 0
Для удаления из строки символов используется процедура Delete (s ,poz ,n ), которая из строки s , начиная с позиции poz , удаляет n символов. При этом длина строки уменьшается на n .
Например:
s:=’ Привет, мир !’;
writeln (length(s));
Delete (s,5,2); // удалить из строки 2 символа, начиная с 5
writeln (s,’ ‘,length(s));
Выведет на экран:
11
Прив, мир! 9
Для добавления в строку символов/подстроки используется процедура Insert (s ubs ,s ,poz ).
Подстроку subs вставить в строку s с позиции poz . Соответственно длина строки увеличивается на n.
Например:
s:=’ Привет, мир !’;
writeln (length(s));
Insert (‘мой ‘,s,9);
writeln (s,’ ‘,length(s));
Выведет на экран:
12
Привет, мой мир! 16
Строки можно сравнивать между собой, используя математические символы: =,<>,>,<,<=,>=. Сравнение строк производится слева направо посимвольно до первого несовпадающего символа, большей считается та строка, в которой первый несовпадающий символ имеет больший код в таблице кодировки ASCII. Если строки имеют различную длину, но в общей части символы совпадают, считается, что короткая строка меньше. Строки равны, если они имеют равную длину и соответствующие символы совпадают.
В результате сравнений получаем логическое значение false или true.
Например, возьмем две строки одинаковой длины, но разного содержания и их сравним:
s:=’ удар’;
s1:=’ удав’;
writeln (s=s1);
writeln (s<s1);
Получим результат :
False // не совпадает последняя буква
False // буква «р» имеет числовое значение кода большее, чем буква «в»
Теперь возьмем строки разной длины:
s:=’ ударник’;
s1:=’ удар’;
writeln (s=s1);
writeln (s>s1);
Получим:
False // несмотря на совпадение первых 4 букв, длина строки больше
True
Для образца посмотрите небольшую программу, по обработке строки разными способами:
И результаты работы этой программы.
Голосование за лучший ответ
Даня
Гуру
(4877)
13 лет назад
На основе этой программы
program z1;
uses crt;
var a,b:string; i,k:integer;
begin
clrscr;
readln(a);
readln(b);
if length(a)
Игорь Лоскутников
Знаток
(265)
13 лет назад
var
s:string;
c:char;
b:boolean;
begin
b:=false;
for i:=1 to length(s) do
if s=c then b:=true;
end.
DeBUGGeR
Ученик
(220)
13 лет назад
открывать какой либо справочник влом, так что скажу из памяти:
pos(Что ищем, где ищем) . Возвращаемое значение – номер позиции или -1 если ниче не найдено.
АА
Мастер
(1294)
13 лет назад
STR-строка, CH-искомый символ символ
if Pos(STR, CH)<>0 then // символ есть