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 |
0 |
mr-Crocodile 2876 / 1532 / 618 Регистрация: 19.03.2019 Сообщений: 5,115 |
||||
16.04.2020, 10:42 |
3 |
|||
ну или по старинке (для PascalABC.NET это, скорее всего очень неоптимально)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
16.04.2020, 10:42 |
3 |
Лидеры категории
Лена-пена
Искусственный Интеллект
М.И.
Искусственный Интеллект
Y.Nine
Искусственный Интеллект
•••
Формулировка задачи:
Дана задача, где пользователь вводит строку. Нужно, чтобы строка не начиналась и не заканчивалась пробелами.
При вводе предложения я проверяю первый символ на правильность ввода обращаясь непосредственно к первому символу таким образом:
Как мне обратиться к последнему символу, если я не могу знать сколько вообще знаков введет пользователь и можно ли проверку на правильность записать более коротким кодом?
Код к задаче: «Как обратиться к последнему символу в строке (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) – количество символов в строке.
Рисунок 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
- Логические типы. Символьные типы. Строчные типы
⇑
Прочтите прежде чем задавать вопрос!
1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas] … [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. “FAQ“, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение – только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы – на PM!
6. Одна тема – один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Последний символ ? |
29.11.2003 4:22 Сообщение |
|
Гость |
HI ! У меня такая проблема : “Напишите программу, присваивающую переменной Char последний символ введенной строки. “ Я думаю , что это надо делать так, Прочитать строку , узнать количество символов….. For I:=1 to Length(S) do ; И как из этого значения взять последний символ ? С:=S[ Последний символ]; |
|
|
SKVOZNJAK |
29.11.2003 6:53 Сообщение |
Профи
Группа: Пользователи Репутация: 11 |
Если не нравится гото, придумай сам, как от него избавиться ;D Код PROGRAM STROKA; BEGIN Сообщение отредактировано: volvo – 17.12.2004 20:31 |
|
|
GLuk |
29.11.2003 12:34 Сообщение |
Профи
Группа: Пользователи Репутация: 0 |
Зачем ты так SKVOZNJAK?? 😀 Это же жестоко!! Код Program ArrayWithoutZero; |
|
|
{ Guest } |
29.11.2003 12:41 Сообщение |
Гость |
2 SKVOZNJAK 2 GLuk Большое спасибо ! Вечером проверю )! |
|
|
APAL |
1.12.2003 14:35 Сообщение |
Смотрю…
Группа: Пользователи Репутация: 6 |
Мда…. ——————– Если что-то не делает того, что вы запланировали ему делать – это еще не означает, что оно бесполезно. |
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
Связь с администрацией: bu_gen в домене octagram.name