Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13

Замена в строке букв на символы

02.07.2017, 14:18. Показов 2396. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
PascalScript.
Есть строка напр. 'Саша'.
Нужно в ней произвести замену символов С а ш а на url код %D0%A1 %D0%B0 %D1%88 %D0%B0.
Как я понимаю должен быть справочник соответствий букв - символам.
Помогите с решением. Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2017, 14:18
Ответы с готовыми решениями:

Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В
помогите! Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В.

Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В
Здравствуйте, помогите пожалуйста решить задачу с помощью процедур "Подсчитать в строке число букв А и В, если букв А больше, чем В, то...

Подсчитать в строке сколько букв A и B,если букв A больше, чем B,то удалить в строке все символы B.
Подсчитать в строке сколько букв A и B,если букв A больше, чем B,то удалить в строке все символы B.

10
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
02.07.2017, 17:57
Если средствами простого Паскаля, используя таблицу
http://fkn.ktu10.com/?q=node/5542
без букв Ё, ё (хотите и их добавите), то можно так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//перевод dec в hex
function inttohex(n:integer):string;
var d:integer;
    s:string;
begin
s:='';
repeat
d:=n mod 16;
if d<10 then s:=chr(ord('0')+d)+s
else s:=chr(ord('A')-10+d)+s;
n:=n div 16;
until n=0;
inttohex:=s
end;
var s,s1:string;
    i:integer;
begin
s:='Саша';
s1:='';
for i:=1 to length(s) do
 begin
  if s[i]<'р' then s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-48)
  else s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-112);
 end;
write(s1);
end.
1
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
02.07.2017, 22:47  [ТС]
Спасибо.
Но не подскажите для укр. 'і' - не работает. Почему?
Вводил текст 'Привіт!'
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.07.2017, 08:47
А символы латиницы (и вообще символы с кодами <=128) не меняются.

Добавлено через 12 минут
Pascal
1
2
3
4
5
6
for i:=1 to length(s) do
 begin
  if ord(s[i])<=128 then s1:=s1+s[i]'
  else if ord(s[i])<=240 then s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-48)
  else s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-112)';
 end;
1
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
03.07.2017, 17:50  [ТС]
Добрый день.
Код поменял.
Ввел слово 'Добрий день' получил %D0%94%D0%BE%D0%B1%D0%C0%D0%B8%D0%B9 %D0%B4%D0%B5%D0%BD%D1%8C
1. Как убрать пробел?
2. Вкинул на сайт %D0%94%D0%BE%D0%B1%D0%C0%D0%B8%D0%B9 %D0%B4%D0%B5%D0%BD%D1%8C http://crypt-online.narod.ru/crypts/url/ пишет URI malformed?
Спасибо.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.07.2017, 18:22
Цитата Сообщение от savylovskij Посмотреть сообщение
Как убрать пробел?
Pascal
1
2
for i:=length(s) downto 1 do
if s[i]=' ' then delete(s,i,1);
По второму не понял.
1
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
03.07.2017, 18:35  [ТС]
Ввел слово 'Добрий день'
Получил
%D0%94%D0%BE%D0%B1%D0%C0%D0%B8%D0%B9%D0% B4%D0%B5%D0%BD%D1%8C - не правильно
А должно быть
%D0%94%D0%BE%D0%B1%D1%80%D0%B8%D0%B9%20% D0%B4%D0%B5%D0%BD%D1%8C
Причина как я понял в букве 'р' сейчас %D0%C0 а должно быть %D1%80 и в пробеле он должен быть символом %20.
Об пробеле - я не правильно написал. Извините.
Спасибо за помощь.
Проверяю полученный Url код на сайте http://crypt-online.narod.ru/crypts/url/.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.07.2017, 18:59
Я первый раз правильно написал
Pascal
1
if s[i]<'р'
а второй раз напартачил
Pascal
1
if ord(s[i])<=240
здесь знак = не нужно, буква р=240.
Вот так с пробелом и с исправлением
Pascal
1
2
3
4
5
6
7
8
9
 s:='Добрий день';
s1:='';
for i:=1 to length(s) do
 begin
  if s[i]=' 'then s1:=s1+'%20'
  else if ord(s[i])<=128 then s1:=s1+s[i]
  else if ord(s[i])<240 then s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-48)
  else s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-112);
 end;
Добавлено через 2 минуты
Нужно было сразу брать пример не Саша, а что-то более универсальное. Видел где-то как с пробелами и другими знаками, подумал не нужно, а сейчас лень искать.

Добавлено через 9 минут
Вот какая-то таблица
http://blog-about.ru/blog/30-t... l-kod.html
там пробел=%20
2016=3210 код пробела, т.е. для какой-то группы символов нужно писать
Pascal
1
s1:=s1+'%'+inttohex(ord(s[i]);
1
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
03.07.2017, 22:00  [ТС]
Спасибо, поменял код все работает, кроме укр. букв 'І','і'.
Поменял на код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
s:='Привіт';
s1:='';
for i:=1 to length(s) do
 begin
  if s[i]=' 'then s1:=s1+'%20'
  else if s[i]='І'then s1:=s1+'%D0%86'
  else if s[i]='і'then s1:=s1+'%D1%96'      
  else if ord(s[i])<=128 then s1:=s1+s[i]
  else if ord(s[i])<240 then s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-48)
  else s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-112);
 end;
Может как-то универсально можно сделать?

Добавлено через 10 минут
Аналогично с буквами 'Є', 'є'.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
04.07.2017, 08:27
Лучший ответ Сообщение было отмечено savylovskij как решение

Решение

Вроде разобрался
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
s1:='';
for i:=1 to length(s) do
case ord(s[i]) of
0..127:s1:=s1+s[i]; //латиница, цифры и прочие символы с кодами 0..128
128..239:case ord(s[i]) of
         168:s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-39); //Ё
         184:s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-39); //ё
         170:s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-38); //Є
         186:s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-38); //є
         else s1:=s1+'%'+inttohex(208)+'%'+inttohex(ord(s[i])-48);//А..п
         end;
else s1:=s1+'%'+inttohex(209)+'%'+inttohex(ord(s[i])-112); //р..я
end;
А что, в украинском символы I,i это не то что в латинице?

Добавлено через 37 минут
Пишут что
Для украинских букв І и і в этой кодировке используются соответствующие латинские буквы с кодами 73 ('49') и 105 ('69')
.
Поэтому эти символы попадают у меня в 0..128.
1
0 / 0 / 0
Регистрация: 02.07.2017
Сообщений: 13
06.07.2017, 22:50  [ТС]
Добрый день.
Огромное спасибо. Вы мне очень помогли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.07.2017, 22:50
Помогаю со студенческими работами здесь

Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В
Помогите пожалуйста! Нужно подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В. Входные...

Подсчитать в строке число букв a и b, если букв а больше b, то удалить в строке все символы b
Помогите, пожалуйста, сделать задачу: Подсчитать в строке число букв a и b, если букв а больше b, то удалить в строке все символы b. Решить...

Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить все символы В
работа с текстом подсчитать в строке число букв А и В, если букв А больше, чем В,то удалить в строке все символы В.

Замена букв на символы.
Доброго времени суток. Тут свалилось на меня &quot;нечто&quot; в образе нежданчика по оивт... Надеюсь на помощь. &quot;В слове из 6 и менее букв...

Замена букв в строке на сочетание букв
Здравствуйте. Дана задача: дана строка которая содержит определенный текст который вводится с клавиатуры, в этом тексте необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru