Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.03.2013, 15:32
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию Переворот символов

Здравствуйте! В "Edit1" находится следующие крякозябры "7156664E" как можо перевернуть последовательность символов наоборот, тобиш что-бы получилось вот так "4E665671" ?
Ответить с цитированием
  #2  
Старый 18.03.2013, 18:51
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Как-то так
Код:
  L := Length(Edit1.Text);
  SetLength(S, L);
  for I := 1 to L do
    S[L-I+1] := Edit1.Text[i];
  Edit1.Text := S;
Ответить с цитированием
  #3  
Старый 18.03.2013, 18:59
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Админ! Забавный баг. Я пишу Text[i], где I с большой буквы, а в результате вижу с маленькой. Это нормально или злобные вирусы запускают LowerCase? Тэг чтоль какой?
Ответить с цитированием
  #4  
Старый 18.03.2013, 19:03
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Прочитай внимательнее порядок символов в результате в посте ТС.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 18.03.2013, 19:09
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Намёк на курсив? Так что, у итальянцев нет заглавных букв?
Ответить с цитированием
  #6  
Старый 18.03.2013, 19:13
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я вообще-то про алгоритм. ТС требуется:
Цитата:
"7156664E" <...>
"4E665671"
Чтобы было понятнее,
Цитата:
"71 56 66 4E" <...>
"4E 66 56 71"
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 18.03.2013, 19:16
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Тормоз! Щаз!
Ответить с цитированием
  #8  
Старый 18.03.2013, 19:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,064
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну что мешает сделать по доному из вариантов:
1. Разбить строку на массив по 2 символа в эдементе и переворачивать этот массив.
2. Сделать цикл с шагом 2 и обрабатывать сразу 2 символа.

Второй вариант как-то так:
Код:
var
  S, R : String;
  I : Integer;
begin
  S := '7156664E';
  If Length(S) mod 2 <> 0 Then Raise Exception.Create('Длинна не кратна 2');
  R := '';
  I := 1;
  While I < Length(S) Do
    Begin
       R := S[i] + S[I+1] + R;
       Inc(I,2);
    End;
  ShowMessage(R);
end;
Ответить с цитированием
  #9  
Старый 18.03.2013, 19:36
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Ну что мешает сделать по доному из вариантов
Ну ясное же дело: лень.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #10  
Старый 18.03.2013, 19:51
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Да, нечётные всё портят. Строго с чётными:
Код:
  L := Length(Edit1.Text);
  SetLength(S, L);
  for I := 1 to L do
  begin
    if I mod 2 = 0 then Continue;
    S[L-I] := Edit1.Text[i];
    S[L-I+1] := Edit1.Text[I+1];
  end; // for I := 1 to L shr 1 do
  Edit1.Text := S;
Ну а с любыми некрасиво:
Код:
  L := Length(Edit1.Text);
  if L mod 2 <> 0 then
  begin
    Edit1.Text := Edit1.Text + #1;
    Inc(L);
  end; // if L mod 2 <> 0 then
  SetLength(S, L);
  for I := 1 to L do
  begin
    if I mod 2 = 0 then Continue;
    S[L-I] := Edit1.Text[i];
    S[L-I+1] := Edit1.Text[I+1];
  end; // for I := 1 to L shr 1 do
  if S[2] = #1 then
    Delete(S, 2, 1);
  Edit1.Text := S;
Забавный эффект - при нечётной длине символы возвращаются на своё место после числа перестановок равного длине строки.

Последний раз редактировалось BBBCat, 18.03.2013 в 19:55.
Ответить с цитированием
  #11  
Старый 18.03.2013, 20:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
var s:AnsiString;
s1, s2: WideString;
...
s := '7156664E';
s1 := WideString(Pointer(@s)^);
s1[Length(s) div 2 + 1] := #0;
L := length(s1);
SetLength(s2, L);
for i := 1 to L do
s2[L-I+1] := s1[i];
s :=AnsiString(Pointer(@s2)^);

ЗЫЖ для непонятливых: не использовать.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 18.03.2013 в 20:09.
Ответить с цитированием
  #12  
Старый 18.03.2013, 20:09
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

А ещё есть такая функция Move...
Ответить с цитированием
  #13  
Старый 18.03.2013, 22:22
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

На производную от bcd формата сильно похоже.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter