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

abelix

10 / 10 / 5

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

Сообщений: 119

1

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

22.09.2010, 21:53. Показов 16490. Ответов 8

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


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

есть ли функция которая проверяет есть ли такой-то символ в строке

ну что то вроде

Pascal
1
if '%' in '!@#$@##$^&*$#%@$' then



0



Puporev

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

64286 / 47585 / 32739

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

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

22.09.2010, 21:55

2

Есть. pos(pdstr,str);
например, есть ли в строке цифра 9.

Pascal
1
if pos('9',s)>0 then write('Есть!')



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 минуту
Единственно строку можно создать максимум из 255 символов, а символьный массив из нескольких тысяч символов.



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

Pascal
1
2
3
4
5
6
7
8
9
10
11
...
var a:string;
k:integer;
...
writeln('vvedite strocy'); readln(a);
k:=0;
for i:=1 to length(a) do
 if a[i]='&' then k:=1;
if k=1 then writeln('est');
else writeln('nety');
...



0



Puporev

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

64286 / 47585 / 32739

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

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

23.09.2010, 07:38

8

Posik, Лишь бы что-то ляпнуть? Вы что считаете что ваш код лучше чем

Pascal
1
if pos('&',s)>0 then write('Есть!')

А речь как раз идет о стандартных функциях, а не о самопальных циклах.



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

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

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


Содержание

  • 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

По своей сути строки в паскале представляют собой одномерные массивы символов.

Для объявления переменной вида «строка» используется тип 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

Для образца посмотрите небольшую программу, по обработке строки разными способами:

Работа со строками в Pascal

И результаты работы этой программы.

Работа со строками в Pascal

Голосование за лучший ответ

Даня

Гуру

(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 // символ есть

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