0 / 0 / 0 Регистрация: 16.04.2020 Сообщений: 1 |
|
1 |
|
Как найти последний символ строки?16.04.2020, 10:01. Показов 3133. Ответов 2
Помогите пожалуйста, пишу программу, но забыл, как найти последний символ строки.
0 |
5056 / 2630 / 2345 Регистрация: 10.12.2014 Сообщений: 9,993 |
|
16.04.2020, 10:12 |
2 |
0 |
mr-Crocodile 2878 / 1533 / 619 Регистрация: 19.03.2019 Сообщений: 5,118 |
||||
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 |
Формулировка задачи:
Дана задача, где пользователь вводит строку. Нужно, чтобы строка не начиналась и не заканчивалась пробелами.
При вводе предложения я проверяю первый символ на правильность ввода обращаясь непосредственно к первому символу таким образом:
Как мне обратиться к последнему символу, если я не могу знать сколько вообще знаков введет пользователь и можно ли проверку на правильность записать более коротким кодом?
Код к задаче: «Как обратиться к последнему символу в строке (string)?»
textual
while (st[1]=' ') or (st[length(st)]=' ') do
Полезно ли:
8 голосов , оценка 3.750 из 5
Прочтите прежде чем задавать вопрос!
1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas] … [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
|
Сообщение |
|
Гость |
HI ! У меня такая проблема : «Напишите программу, присваивающую переменной Char последний символ введенной строки. « Я думаю , что это надо делать так, Прочитать строку , узнать количество символов….. For I:=1 to Length(S) do ; И как из этого значения взять последний символ ? С:=S[ Последний символ]; |
|
|
SKVOZNJAK |
Сообщение |
Профи
Группа: Пользователи
Репутация: |
Если не нравится гото, придумай сам, как от него избавиться ;D Код PROGRAM STROKA; BEGIN Сообщение отредактировано: volvo — 17.12.2004 20:31 |
|
|
GLuk |
Сообщение |
Профи
Группа: Пользователи
Репутация: |
Зачем ты так SKVOZNJAK?? Код Program ArrayWithoutZero; |
|
|
{ Guest } |
Сообщение |
Гость |
2 SKVOZNJAK 2 GLuk Большое спасибо ! Вечером проверю )! |
|
|
APAL |
Сообщение |
Смотрю…
Группа: Пользователи
Репутация: |
Мда…. ——————— Если что-то не делает того, что вы запланировали ему делать — это еще не означает, что оно бесполезно. |
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
Связь с администрацией: bu_gen в домене octagram.name
Редактировать
Символы и основные операции над ними
Символы имеют тип char, занимают 2 байта и хранятся в кодировке Unicode (UTF-16).
var c1: char;
var c2 := 'z';
Для преобразования символа c
в код используется функция Ord(c)
, для обратного преобразования кода i в символ используется функция Chr(i)
.
begin
var c := 'ю';
Print(Ord(c)); // 1102
Print(Chr(1102)); // ю
end.
Классический способ определить символ, следующий за данным в кодовой таблице, — это преобразовать символ в код, прибавить к коду число и потом преобразовать полученный код снова в символ:
Аналогично определяется предыдущий символ
Методы типа char
Методы, встроенные в тип char, делятся на две категории:
- проверяющие, принадлежит ли символ указанной категории:
c.IsDigit
,c.IsLetter
,c.IsLower
,c.IsUpper
- преобразующие символ:
c.ToUpper
,c.ToLower
,c.ToDigit
.
Отметим, что c.IsDigit
эквивалентно (c >= '0') and (c <= '9')
и эквивалентно c in '0'..'9'
Для c.IsLower
, c.IsLower
, c.IsUpper
такой простой аналогии нет. Дело в том, что в этих методах проверяются все символы, являющиеся буквами в каком-то алфавите народов мира (в частности, английские и русские)
Отметим также, что c.IsLower
возвращает True
только если это буква в нижнем регистре — для не букв возвращается False
.
Строки
Введение
Отметим, что для строк имеется много операций и методов, не все из которых мы рекомендуем для школьников.
Основная причина — многие методы строк в .NET считают, что строки индексируются с нуля, а в Паскале строки индексируются с 1.
Для устранения этой дилеммы при работе со школьниками мы не используем методы строк, которые работают с индексами, индексируемыми с нуля. Для них существуют эквивалентные замены внешними функциями, которые предполагают, что строки индексируются с 1.
Индексация строк
Строки в Паскале индексируются с 1. К символам строк можно обращаться по индексам — s[i]
.
Например:
begin
var s: string;
s := 'тор';
Print(s[1],s[2],s[3]);
end.
Символы строк можно менять:
begin
var s := 'пир';
s[1] := 'м';
Print(s); // мир
end.
Можно использовать индексацию с конца: s[^i] обозначает i-тый символ с конца
begin
var s := 'мир';
s[^1] := 'г';
Print(s); // миг
end.
Циклы по строкам
begin
var s := 'привет';
for var i:=1 to s.Length do
s[i] := Chr(Ord(s[i])+1);
Print(s);
end.
foreach var c in s do
Print(c);
Операции +, *n и in
Строки можно складывать и умножать на целое положительное число
Пример. Генерация строки ‘abcdefghijklmnopqrstuvwxyz’
Идея. Начать с пустой строки. Всякий раз в цикле добавлять к строке символы от ‘a’ до ‘z’
Код
begin
var s := '';
for var c := 'a' to 'z' do
s += c;
end.
Методы Count, CountOf, Where
Чтобы посчитать количество символов в строке, удовлетворяющих определённому условию, используется метод Count. Если нужно посчитать, сколько раз встречается определенный символ, используется более простой метод CountOf
begin
var s := 'абракадабра';
s.CountOf('а').Print;
s := 'а123бр45а67к89адабра';
s.Count(c -> c.IsDigit).Print;
end.
Если в строке надо отфильтровать только определенные символы, используется метод Where. Он возвращает последовательность символов, которую можно назад преобразовать к строке, используя метод JoinToString:
begin
var s := 'а123бр45а67к89адабра';
s := s.Where(c -> c.IsLetter).JoinToString;
end.
s.ToWords и разбиение строки на слова
Метод s.ToWords разбивает строку на массив слов, используя пробел в качестве разделителя. Полученный массив можно преобразовать и слить в строку, используя метод JoinToString:
begin
var s := 'как однажды жак звонарь головой сломал фонарь';
var a := s.ToWords;
Sort(a);
s := a.JoinToString
end.
По умолчанию JoinToString разделяет слова пробелами
Функция Pos и процедуры Delete, Insert
Pos(subs,s)
возвращает позицию первого вхождения подстроки subs
в сторке s
или 0 если подстрока не найдена
Pos(subs,s,from)
начинает искать подстроку в строке с позиции from
.
Следующий код выводит позиции всех вхождений s1 в s:
begin
var s := 'абракадабра';
var s1 := 'бра';
var p := Pos(s1,s);
while p>0 do
begin
Print(p);
p := Pos(s1,s,p+s1.Length);
end;
end.
tydfrew3
+30
Решено
6 лет назад
Информатика
10 — 11 классы
Дана строка. Вывести первый, последний и средний (если он есть)) символы.НАПИСАТЬ ПРОГРАММУ В ПАСКАЛЕ.ПОЖАЛУЙСТА ОЧЕНЬ НАДО
Смотреть ответ
1
Ответ проверен экспертом
4
(5 оценок)
3
petyaGavrikov
6 лет назад
Светило науки — 5869 ответов — 21974 помощи
var s:string; l:integer;
begin
write(‘Введите строку: ‘);
readln(s);
writeln(‘Первый символ: ‘,s[1]);
l:=length(s);
writeln(‘Последний символ: ‘,s[l]);
if l mod 2 = 1
then writeln(‘Средний символ: ‘,s[l div 2+1])
else writeln(‘Длина строки четна’);
end.
Пример:
Введите строку: ПАСКАЛЬ
Первый символ: П
Последний символ: Ь
Средний символ: К
(5 оценок)
https://vashotvet.com/task/4177447