ReverseString для кодировки UTF-8

Модератор: Модераторы

ReverseString для кодировки UTF-8

Сообщение Python » 01.10.2018 20:31:11

Во время чтения очередной статьи про собеседования на программиста, столкнулся с такой простой на первый взгляд задачей: претенденту предложили написать функцию, которая "переворачивает" строку. Аналог ReverseString, но свой. Ответ, который дал претендент, не устроил собеседователя. Оказалось, что он ждал уточняющего вопроса: в какой кодировке, дескать, задана строка, а ответ должен был быть принят для кодировки UTF-8. С задачей претендент, похоже, не справился, а я решил написать свой вариант, поскольку на первой странице гугля такового не обнаружилось. Предлагаю на суд общественности:
Код: Выделить всё
// переворачивает строку, записанную в UTF-8 в обратном направлении
function ReverseStringUtf8(const S:string):string;
var
  PrimeChar,LastChar:integer;
  B:byte;
begin
  PrimeChar:=1;
  LastChar:=Length(S);
  SetLength(Result,LastChar);
  while LastChar>0 do begin
    B:=ord(S[PrimeChar]);
    if B and $F7=$F0 then begin
      // четырёхбайтный символ
      Result[LastChar-3]:=S[PrimeChar+0];
      Result[LastChar-2]:=S[PrimeChar+1];
      Result[LastChar-1]:=S[PrimeChar+2];
      Result[LastChar-0]:=S[PrimeChar+3];
      Inc(PrimeChar,4);
      Dec(LastChar,4);
    end else if B and $F0=$E0 then begin
      // трёхбайтовый символ
      Result[LastChar-2]:=S[PrimeChar+0];
      Result[LastChar-1]:=S[PrimeChar+1];
      Result[LastChar-0]:=S[PrimeChar+2];
      Inc(PrimeChar,3);
      Dec(LastChar,3);
    end else if B and $E0=$C0 then begin
      // двухбайтовый символ
      Result[LastChar-1]:=S[PrimeChar+0];
      Result[LastChar-0]:=S[PrimeChar+1];
      Inc(PrimeChar,2);
      Dec(LastChar,2);
    end else begin
      // однобайтный символ
      Result[LastChar]:=S[PrimeChar];
      Inc(PrimeChar);
      Dec(LastChar);
    end;
  end;
end;
Python
новенький
 
Сообщения: 16
Зарегистрирован: 23.01.2018 21:50:17

Re: ReverseString для кодировки UTF-8

Сообщение SSerge » 02.10.2018 06:04:51

Что-то очень сомневаюсь, что работодатель ожидает от претендента знаний таблицы префиксов utf8 на память.
И очень сомневаюсь, что ему понравится решение, как бы намекающее на готовность претендента постоянно писать нечитаемый код, основанный на внутренних структурах организации данных. Если, конечно, это не набор на крайне узкую задачу. :D
SSerge
энтузиаст
 
Сообщения: 837
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул


Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru