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

            
 


СТРОКИ
 


Строка в языке Паскаль — это, в общем-то, то же самое,
что и в «обыденной» жизни. То есть последовательность букв, цифр, знаков
препинания и т.д. (иначе говоря, символов) в любом порядке и в любом
количестве.

Например, строкой является
В жизни всё закономерно

Следует знать, что Паскаль налагает на использование строк некоторые
ограничения. Во-первых, их длина не может превышать 255 символов.
Во-вторых, все строки в программе должны быть заключены в апострофы.
Т.е.
‘Быть или не быть, вот в чем вопрос!’

И наоборот, все, что стоит между двумя апострофами, является строкой
Например
‘a := sin(x) + 5.65’
тоже строка, а не оператор присваивания.

В строках могут использоваться любые символы, которые только Вы сумеете
набрать на клавиатуре — даже русские буквы. Не может быть элементом
строки только один символ, а именно апостроф. Причины понятны — он
отмечает начало и конец строки.
В Паскале строка определяется как произвольная последовательность
символов длиной не более 255 символов, заключенная в апострофы.

Тип строка в Паскале имеет два названия. Исторически первое выглядит
так:
var s: packed array [1..50] of char;

(т.е. упакованный символьный массив). Впоследствии его заменили на более
короткое и понятное:
var s: string[50];

( string в переводе строка). Можете пользоваться любым. Объявление
строки максимальной (255) длины еще короче:
var s: string;

Тип string — уникальный в том смысле, что им можно пользоваться
одновременно и как единым значением (так, как мы используем целую
переменную), и как массивом. Этим строка отличается от простого
(неупакованного) символьного массива. Такой массив — обыкновенный, и все
ниже сказанное к нему не относится, хотя формально он тоже
последовательность символов.
В типе string (но не packed array) элемент с номером 0 используется для
хранения длины строки. Сами символы-элементы строки имеют номера от 1 до
последнего.

В строке, объявленной как string[50], можно хранить строки любой длины,
лишь бы она не превосходила 50-ти.


Работа со строками.
 


Строки как единое значение можно:
— присваивать
— складывать
— вводить
— выводить
— сравнивать

В отличие от всех других массивов строки вводятся/выводятся одним
оператором, без цикла!
Разберем эти действия.

1. Присваивание строк. Присваивать можно любую строку любой,
независимо от объявления. Необходимо только следить за тем, чтобы строка
«влезла» в строковую переменную. Другими словами, если строковая
переменная объявлена как string[50], нельзя запихнуть в нее строку из
100 символов. Также можно присвоить строковой переменной символьную
(символ можно назвать строкой из 1-го элемента), но не наоборот. Пример
присваивания:
s := ‘String переводится как строка’;

2. Сложение строк. Такое сложение называется конкатенацией или
катенацией и применяется для соединения нескольких строк в одну.
Например, после выполнения оператора
s := ‘Иван’ + ‘ Васильевич’;

в переменной s будет содержаться строка ‘Иван Васильевич’. Как, надеюсь,
Вы уже поняли, операция сложения строк обозначается +. Операция сложения
применима только к строкам типа string.

3. Ввод/вывод строк. Для того, чтобы ввести строку s, достаточно
написать
readln(s);
А чтобы вывести:
writeln(s);

4. Сравнение строк. К строкам применимы все операции сравнения: =
(на равенство), <> (на неравенство) и т.п.

С другой стороны, строка — это массив, и каждый элемент ее — символ.
Строку можно обрабатывать поэлементно, иначе говоря, с ней можно
обращаться как с обыкновенным символьным массивом. И выполнять любые
операции, разрешенные в данном случае (см. Одномерные массивы). В
частности, 5-тый символ строки s имеет имя s[5], как обычно.
Впрочем, есть одно очень важное отличие строковых переменных — это
массивы переменной длины. Их длина заранее неизвестна, она зависит от
того, какую строку мы присвоили строковой переменной. Длина эта хранится
в 0-м элементе строковой переменной. Сами символы хранятся в элементах
начиная с 1-го. Таким образом, если мы напишем
s := ‘abc’
то s[0] = 3, s[1] = ‘a’, s[2] = ‘b’, s[3] = ‘c’. Остальные элементы
строки (4-ый, 5-ый и т.д.), если они есть, неопределены. Скорее всего,
там хранится всякий мусор.

Однако не рекомендуется получать длину строки s как s[0]. Для этого в
Паскале существует специальная функция length(s). Она возвращает длину
строки, переданной ей в качестве параметра. Такой способ безопасней и
надежней.
Например, так можно перебрать всю строку по символам (операция, которая
часто встречается в задачах):
var s: string[50];
i: integer;

begin

readln(s);

for i := 1 to length(s) do
begin
{что-то сделать с символом s[i]}
end;

end.
Так как элемент строки имеет тип char, над ним можно производить все
операции, разрешенные для этого типа данных.


Стандартные функции работы со строковыми переменными.
 


В Паскале есть несколько стандартных функций и процедур
для работы со строковыми данными. Вот их спецификации:

1. Функция Length( <строка> ) : integer
Возвращает длину строки-параметра в символах. Например, length(‘abc’)
будет равно 3-м.

2. Функция Concat( <строка> [,<строка>, <строка> …] ) : string

Возвращает строку, являющуюся объединением (конкатенацией) всех
параметров функции. Эта функция является аналогом операции сложения.
Параметров — произвольное число. Все параметры должны иметь тип
string. Например, concat(‘a’, ‘bc’, ‘!!’) будет ‘abc!!’.

3. Функция Copy( <строка>, <позиция>, <сколько> ) : string

В качестве результата возвращает подстроку <строки>, начинающуюся с
символа номер <позиция> длиной <сколько> символов (как бы вырезает часть
<строки>). Параметры <позиция> и <сколько> должны быть целыми
выражениями. Например, результатом вызова copy(‘1234567890’,3,4) будет
строка ‘3456’.

4. Функция Pos( <подстрока>, <строка> ) : byte

Определяет, содержится ли <подстрока> в <строке>. Если да, возвращает
номер символа, с которого начинается <подстрока> в <строке>. Если нет,
возвращает 0. Например, результатом pos(‘123’, ‘ab123cde’) будет 3, т.к.
строка ‘123’ в строке ‘ab123cde’ содержится и начинается с позиции 3.

5. Процедура Delete( var <строка>, <позиция>, <сколько> )

Удаляет из <строки> <сколько> символов, начиная с символа номер
<позиция>. По действию похожа на Copy, но вырезанная часть исчезает из
<строки>. Параметр <строка> должен быть переменной строкового ти-
па, параметры <позиция> и <сколько> — выражениями целого типа. Например,
пусть строка s = ‘123456789’. Тогда после выполнения процедуры delete(s,5,2)
строка s будет равна ‘1234789’.

6. Процедура Insert( <строка>, var <строка-куда>, <позиция> )

Вставляет <строку> в <строку-куда>, начиная с символа номер <позиция>.
Противоположна по действию процедуре Delete. Параметр <строка-куда>
должен быть строковой переменной, параметр <позиция> —
целым выражением. Например, пусть строка s = ‘abcde’. Тогда после
выполнения процедуры Insert(’12’, s,3) строка s будет равна ‘ab12cde’

7. Процедура Val( <строка>, var <ариф. перем.>, var <код ошибки>
)

Преобразует <строку> в числовое значение, которое помещается в
переменную <ариф. перем.>. Параметр <ариф. перем.> должен быть целой или
вещественной переменной (в зависимости от того, какого типа число
содержится в <строке>). Конечно же, <строка> должна содержать правильную
запись числа. Если при преобразовании возникла ошибка, позиция символа,
на котором ‘споткнулись’, заносится в <код ошибки>.

Если <код ошибки> равен 0, преобразование прошло успешно. Параметр <код
ошибки> должен быть целой переменной. Например, пусть i и c целые
переменные. Тогда после вызова Val(‘123’, i, c) переменная i = 123, а с
= 0. После вызова Val(‘1a2’, i, c) значение переменной i не определено,
а c = 2 (вторым символом встретилась буква).

8. Процедура Str( <ариф. выраж.>, var <строка> )

Преобразует числовое значение <ариф. выраж.> в строковое и помещает его
в <строку>. Старое значение строки теряется. Параметр <строка> должен
быть строковой переменной, а параметр <ариф. выраж.> — выражением целого
либо вещественного типа. В <ариф. выраж.> можно задать формат
преобразования (как в операторе вывода). Примеры преобразования (s —
строка):
Str(4.14, s) s = ‘4.14’
i = 5 Str(i+12, s) s = ’17’
f = 3.1415926 Str(f:5:2, s) s = ‘3.14’

Таковы стандартные функции работы со строковыми переменными. Однако
практически все эти действия можно произвести без применения стандартных
функций и процедур.

Пример решения задачи со строками.
 


Разберем  задачу на применение строк.
Ввести строку и заменить в ней все пробелы на троеточия.

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

Вариант A. С применением стандартных функций.

Как найти пробел? Для этого есть функция поиска подстроки pos (ничто не
мешает считать пробел подстрокой, хотя и маленькой). Когда pos находит
подстроку, она возвращает позицию ее начала — что нам и нужно. А если не
находит — возвращает 0. Тогда мы должны закончить преобразование строки
(пробелов не осталось!). Вырезать пробел можно с помощью процедуры
delete, вставить — с помощью insert. Получаем следующий алгоритм:

1. Ввести строку.
2. Найти первый пробел в строке при помощи функции pos.
3. Пока результат pos не равен 0, выполнять шаги:
3.1. Удалить найденный пробел
3.2. Вставить на место пробела троеточие
3.3. Найти следующий пробел
4. Вывести получившуюся строку.

Вариант B. С использованием строки как символьного массива.

Строка — это символьный массив. Значит, найти пробелы можно просто
проверяя все символы строки друг за другом. Если символ не пробел —
переносим его в строку-результат. Если пробел — заносим в
строку-результат троеточие, а пробел игнорируем. И так до конца исходной
строки.

В отличие от первого варианта во втором потребуется две строки
(дополнительная строка используется для конструирования результата).
Алгоритм этого решения можно записать так:

1. Ввести исходную строку.
2. Записать в строку-результат пустую строку.
3. Для i от 1 до конца исходной строки выполнять:
если i-тый символ исходной строки — пробел то добавить к
строке-результату троеточие, иначе добавить к строке-результату сам этот
символ.
4. Вывести строку-результат.

Почти любая задача на строки допускает решение типа A и типа B. Вам
выбирать, какое применить в Вашей программе. Программы на Паскале для
этой же задачи выглядят так:

program prim1; { вариант A }
uses crt;
var s: string;
k: byte; { это номер очередного символа-пробела }
begin
clrscr;
textcolor(lightgreen);
writeln(‘Замена в строке пробелов на …’);
write(‘Введите строку: ‘);
readln(s);
k := pos(‘ ‘, s);
while k <> 0 do
begin
delete(s, k,1);
insert(‘…’, s, k);
k := pos(‘ ‘, s);
end;
writeln(‘Результат: ‘, s);
readkey;
end.
program prim_6a1b; { вариант B }
uses crt;
var s, res: string;
i: byte; { это номер очередного символа }
begin
clrscr;
textcolor(lightgreen);
writeln(‘Замена в строке пробелов на …’);
write(‘Введите строку: ‘);
readln(s);
res := »;
for i := 1 to length(s) do
if s[i] = ‘ ‘ then res := res + ‘…’
else res := res + s[i];
writeln(‘Результат: ‘, res);
readkey;
end.


ПОЛЕЗНЫЕ СОВЕТЫ.
 


1. Пустая строка обозначается », а не ‘ ‘.
2. Строки ( string) можно складывать с символами ( char) — результат
будет типа string.
3. Длина строки s хранится в ее элементе номер 0 (т.е. s[0]), однако
безопаснее использовать функцию length(s).

Формулировка задачи:

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

Код к задаче: «Как найти пробел в строке и удвоить его?»

textual

Листинг программы

for i:=Length(s) downto 1 do if s[i]=' ' then Insert(' ',s,i);

Полезно ли:

7   голосов , оценка 4.000 из 5

Похожие ответы

  1. Найти минимальный элемент матрицы, вывести его значение, номер строки и номер столбца
  2. Дана строка, содержащая пробелы. Найдите, сколько в ней слов
  3. Как определить множество включающее в себя др множества?
  4. Удалить все лишние пробелы, оставив по одному между словами
  5. Распечатайте введенную строку в обратном порядке
  6. Рекурсивная процедура, переставляющая символы строки в обратном порядке
  7. Вычислить сумму и найти число слагаемых, которые вошли в сумму
  8. Как сделать, чтобы пользователь вводил размер рисунка произвольно?
  9. Из сумм элементов строк матрицы сформировать вектор
  10. Найти сумму неповторяющихся элементов массива a(20)

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

Как найти позицию второго пробела в строке S (в pascal) ?

Вы открыли страницу вопроса Как найти позицию второго пробела в строке S (в pascal) ?. Он относится к категории
Информатика. Уровень сложности вопроса – для учащихся 10 — 11 классов.
Удобный и простой интерфейс сайта поможет найти максимально исчерпывающие
ответы по интересующей теме. Чтобы получить наиболее развернутый ответ,
можно просмотреть другие, похожие вопросы в категории Информатика,
воспользовавшись поисковой системой, или ознакомиться с ответами других
пользователей. Для расширения границ поиска создайте новый вопрос, используя
ключевые слова. Введите его в строку, нажав кнопку вверху.

Сомневаетесь в ответе?

Найдите правильный ответ на вопрос ✅ «Как найти позицию второго пробела в строке S (в pascal) ? …» по предмету 📘 Информатика, а если вы сомневаетесь в правильности ответов или ответ отсутствует, то попробуйте воспользоваться умным поиском на сайте и найти ответы на похожие вопросы.

Смотреть другие ответы

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как составить таблицу в excel 2013
  • Как найти матрицу поворота по двум векторам
  • Как найти нужные хэштеги
  • Как найти парню свою профессию
  • Как найти длину восьмиугольника вписанного в окружность

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии