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

0 / 0 / 0

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

Сообщений: 1

1

Как найти последний символ строки?

16.04.2020, 10:01. Показов 3114. Ответов 2


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

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



0



5056 / 2630 / 2345

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

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

16.04.2020, 10:12

2

var последний_символ_строки := строка.Last;



0



mr-Crocodile

2876 / 1532 / 618

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

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

16.04.2020, 10:42

3

ну или по старинке (для PascalABC.NET это, скорее всего очень неоптимально)

Pascal
1
if Length(S)>0 then LastChar := S[ Length(S) ];



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

16.04.2020, 10:42

3

Лидеры категории

Лена-пена


Лена-пена

Искусственный Интеллект

М.И.


М.И.

Искусственный Интеллект

Y.Nine


Y.Nine

Искусственный Интеллект

king71alex
Куклин Андрей
Gentleman
Dmitriy
•••

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

Дана задача, где пользователь вводит строку. Нужно, чтобы строка не начиналась и не заканчивалась пробелами.
При вводе предложения я проверяю первый символ на правильность ввода обращаясь непосредственно к первому символу таким образом:

Как мне обратиться к последнему символу, если я не могу знать сколько вообще знаков введет пользователь и можно ли проверку на правильность записать более коротким кодом?

Код к задаче: «Как обратиться к последнему символу в строке (string)?»

textual

  while (st[1]=' ') or (st[length(st)]=' ') do

Полезно ли:

8   голосов , оценка 3.750 из 5


Содержание

  • 1. Представление строк символов в языке Pascal. Тип String. Общие сведения
  • 2. Примеры объявления строк типа String
  • 3. Перечень операций, процедур и функций, работающих со строками символов
  • 4. Доступ к отдельному символу в строке S[i]. Операция индексирования
  • 5. Операция присваивания строк :=
  • 6. Операция +. Конкатенация строк
  • 7. Операции =, <>. Сравнение строк на равенство (неравенство)
  • 8. Операции >, <, >=, <=. Сравнение строк на большее или меньшее с точки зрения лексикографического порядка
  • Связанные темы

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

1. Представление строк символов в языке Pascal. Тип String. Общие сведения

В языке Паскаль определены два типа строк:

  • строки типа String;
  • строки типа PChar. Более подробно о строках типа PChar можно прочесть здесь.

Строки символов есть не что иное как массив символов. Этот составный тип данных занимает важное место при разработке различных программ на Pascal-ориентированных языках. Исходя из этого контекста, стандартный Паскаль допускает два способа сохранения символьных массивов в памяти компьютера:

  • распакованный;
  • упакованный.

Описание распакованного массива символов выглядит примерно следующим образом:

var
  M: Array[1..Max] of char;

здесь

  • M – имя массива;
  • Max – максимально-возможное количество элементов в массиве.

Описание упакованного массива символов содержит дополнительное слово packed

var
  M: Packed Array[1..Max] of char;

Для преобразования символьного массива из распакованной формы в упакованную и наоборот, в языке Pascal имеются стандартные функции Pack, UnPack.

Любая символьная строка не что иное как упакованный (packed) массив символов. Для удобного описания и использования одномерных упакованных массивов символов в языке Pascal введен тип String. Работу с типом String поддерживают многие стандартные функции языка Pascal. Эти функции упрощают выполнение рутинных (базовых) операций над строками символов.

Строка символов типа String может быть присвоена как константе так и переменной. Любая константа или переменная может объявлять строку символов одним из двух способов:

  • с заданной длиной строки;
  • без указания длины строки. В этом случае устанавливается длина строки, равная 255 символам. Это максимально возможная длина строки типа String.

Если задается длина строки, то объявление переменного типа String выглядит приблизительно так:

var
  s : String[50];

здесь

  • s – объявляемая строка;
  • 50 – максимально-возможная длина строки.

Если строка s объявляется без указания длины, то вид такого объявления следующий:

var
  s : String;

Такие же правила объявлений действуют для констант и типов.

В памяти строка типа String занимает на 1 байт больше его длины. В нулевой позиции строки указывается длина строки (рисунок 1) – количество символов в строке.

Pascal. Представление строки типа String в памяти компъютераРисунок 1. Представление строки типа String в памяти компъютера

Тип String без указания длины совместим со всеми типами строк. Отдельный символ строки является типом Char.

 

2. Примеры объявления строк типа String
type
  // Объявление типов строк
  MySting20 = String[20];
  IdCode = String[10]; // Идентификационный код
  Character = String[1]; // Единичный символ как строка

const
  // Объявление строк как типизированных констант
  Mon : String = 'Monday';
  Jan : String = 'January';

var
  // Объявление строк как переменных
  s1 : String[50];
  s2 : String;

 

3. Перечень операций, процедур и функций, работающих со строками символов

Для строк типа String определены следующие операции:

  • :=присваивание;
  • +слияние (конкатенации);
  • сравнение. Для сравнения строк применяются любые операции отношения (=, <>, >, <, >=, <=). Сравнение строк происходит посимвольно, начиная с первого символа. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны.

Для доступа к отдельному символу в строке определена операция индексирования

S[i]

здесь

  • S – строка;
  • i – позиция символа в строке, которая нумеруется с 1.

Со строками символов используются следующие процедуры и функции:

  • Concat – сцепляет (конкатенирует) две строки;
  • Copy – возвращает подстроку из строки;
  • Delete – удаляет подстроку из строки;
  • Insert – вставляет (добавляет) подстроку в строку;
  • Length – возвращает длину строки;
  • Pos – осуществляет поиск подстроки в строке;
  • Val – конвертирует строку в число;
  • Str – конвертирует число в строку.

 

4. Доступ к отдельному символу в строке S[i]. Операция индексирования

Для получения отдельного символа строки используется операция индексирования. В наиболее простом виде общий вид операции получения символа

c := S[index];

здесь

  • c – символ типа Char;
  • s – исходная строка;
  • index – позиция символа в строке. Нумерация index начинается с 1.

Операция индексирования может использоваться и в левой части оператора присвоения. Это означает, что допускается изменять значение в строке. Приблизительный код изменения значения следующий

S[index] := c;

здесь

  • s – строка типа String;
  • index – позиция в изменяемой строке. Значение index нумеруется с 1;
  • c – символ типа Char, заменяющий символ S[index].

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  c : Char;
  s : String;

begin
  // Заданная строка
  S := 'Hello, world!';

  // Получить символ с индексом 5
  c := S[5];
  Writeln('c = ', c); // c = o

  // Получить символ с індексом 1
  c := S[1];
  Writeln('c = ', c); // c = H

  // Получить последний символ строки
  c := S[Length(s)];
  Writeln('c = ', c); // c = !

  // Попытка изменить значение S[8]
  S[8] := 'W'; // допускается
  Writeln(S); // Hello, World!

  Readln;
end.

Результат выполнения программы

c = o
c = H
c = !
Hello, World!

 

5. Операция присваивания строк :=

Полезной операцией для работы со строками является операция :=, которая осуществляет присваивание строк. Общий вид использования операции следующий:

S1 := S2;

здесь

  • S1 – строка-приемник, получающая значение строки S2. Предыдущее значение строки S1 теряется;
  • S2 – строка-источник.

При присвоении строк делается полная копия строки-источника. Это означает, что строки размещаются на разных участках памяти.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  s1 : String;
  s2 : String;

begin
  // Задать значение строкам
  S1 := 'Pascal';
  S2 := 'Delphi';

  // Присвоить строке S1 новое значение
  S1 := S2;

  // Вывести результат
  Writeln('S1 = ', S1);
  Writeln('S2 = ', S2);

  // Изменить строку S2
  S2 := 'JavaScript';

  // Вывести S1 и S2
  Writeln('S1 = ', S1);
  Writeln('S2 = ', S2);

  Readln;
end.

Результат выполнения программы

S1 = Delphi
S2 = Delphi
S1 = Delphi
S2 = JavaScript

 

6. Операция +. Конкатенация строк

Добавление (конкатенацию) строк можно производить с помощью операции + (плюс). В наиболее общем случае реализация сложения строк выглядит следующим образом:

s := s1 + s2 + ... + sN;

здесь

  • s – строка, что есть результатом конкатенации строк s1, s2, …, sN;
  • s1, s2, sN– некоторые строки.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  S1, S2, S3 : String;

begin

  // Конкатенация строк
  S1 := 'Hello';
  S2 := 'world';
  S3 := S1 + ', ' + S2 + '!';
  Writeln(S3); // Hello, world!

  S1 := 'ABCD';
  S1 := S1 + S1;
  Writeln(S1); // ABCDABCD

  Readln;
end.

 

7. Операции =, <>. Сравнение строк на равенство (неравенство)

В языке Паскаль строки допускают сравнение на равенство/неравенство. Для сравнения строк используются операции =, <> по следующему образцу

S1 = S2
S1 <> S2

Результатом выполнения операций является логическое значение True или False. Сравнение строк применяется в операторах, допускающих выполнение логических операций.

Пример.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  S1, S2 : String;

begin

  // Сравнение строк
  Write('S1 = ');
  Readln(S1);
  Write('S2 = ');
  Readln(S2);

  // Операция =
  if S1 = S2 then
    Writeln('Strings are equal')
  else
    Writeln('Strings are not equal');

  // Операция <> (не равно)
  if S1 <> S2 then
    Writeln('Strings are not equal')
  else
    Writeln('Strings are equal');

  Readln;
end.

Результат выполнения программы

S1 = abcd
S2 = abcd
Strings are equal
Strings are equal

 

8. Операции >, <, >=, <=. Сравнение строк на большее или меньшее с точки зрения лексикографического порядка

Для сравнения строк в лексикографическом порядке используются операции >, >=, <, <=. В наиболее общем случае сравнение двух строк S1 и S2 имеет следующий вид

S1 < S2
S1 <= S2
S1 > S2
S1 >= S2

Результатом операций является значение True или False. Лексикографический порядок знаков в строках определяется числовым значением кодов этих знаков.
Так, например, код символа ‘A’ следует перед кодом символа ‘B’. Соответственно выражение

'A' < 'B'

вернет результирующее значение True.

Пример.

...

// Сравнение строк
S1 := 'ABC';
S2 := 'ABCD';
res := S1 >= S2; // res = False
res := S1 > S2; // res = False
res := S1 <= S2; // res = True
res := S1 < S2; // res = True

...

 


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

  • Функции работы со строками символов. Функции Concat, Copy, Delete, Insert, Length, Pos, Val, Str
  • Логические типы. Символьные типы. Строчные типы

 


IPB

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas][/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. “FAQ“, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение – только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы – на PM!
6. Одна тема – один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Последний символ ?

сообщение 29.11.2003 4:22

Сообщение
#1

Гость



HI !

У меня такая проблема :

“Напишите программу, присваивающую переменной Char последний символ введенной строки. “

Я думаю , что это надо делать так, Прочитать строку , узнать количество символов…..
Но как вывести именно последний ? Первый понятно как, а вот поледний ?
Возможно ли пустить цикл

For I:=1 to Length(S) do ;

И как из этого значения взять последний символ ? С:=S[ Последний символ];

 К началу страницы 

+ Ответить 

SKVOZNJAK

сообщение 29.11.2003 6:53

Сообщение
#2


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +



Если не нравится гото, придумай сам, как от него избавиться ;D

Код

PROGRAM STROKA;
VAR A: STRING[255];
   Q: INTEGER;
LABEL  1,2;

BEGIN
FOR Q:=1 TO 255 DO A[Q]:=CHR(1);
WRITELN(”);
WRITELN(‘ЖИЗНЬ, ИЛИ КОШЕЛЕК!!! ВВОДИ СТРОКУ!’);
READ(A);
FOR Q:=1 TO 255 DO IF ORD(A[Q])=1 THEN GOTO 1;
GOTO 2;
1: DEC(Q);
2: WRITELN(”);
IF Q>0 THEN WRITELN(A[Q]);
END.

Сообщение отредактировано: volvo – 17.12.2004 20:31

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

GLuk

сообщение 29.11.2003 12:34

Сообщение
#3


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +



Зачем ты так SKVOZNJAK?? 😀 Это же жестоко!!

Код

Program ArrayWithoutZero;
Uses
    Crt;
Const
     S = ‘The last char is D’;
Function GetLastChar(S:String):Char;
begin
     GetLastChar:=S[Length(S)];
end;
Begin
     ClrScr;
     Write(GetLastChar(S));
End.

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

{ Guest }

сообщение 29.11.2003 12:41

Сообщение
#4

Гость



2 SKVOZNJAK

2 GLuk

Большое спасибо ! Вечером проверю )!

 К началу страницы 

+ Ответить 

APAL

сообщение 1.12.2003 14:35

Сообщение
#5


Смотрю…
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +



Мда….   smile.gif

——————–

Если что-то не делает того, что вы запланировали ему делать – это еще не означает, что оно бесполезно.
——————–
Прежде, чем задать вопрос – Правила :: FAQ :: Поиск

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)

Пользователей: 0

500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают

Связь с администрацией: bu_gen в домене octagram.name

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