Как преобразовать строку в целое число - PullRequest
1 голос
/ 17 ноября 2010

Пример: a = 1 b = 2 c = 3 .. .. z = 26 aa = 27 ab = 28

как преобразовать другую строку в целое число?например, я хочу преобразовать 'lmao' в целое число.пожалуйста, помогите мне :) спасибо.в паскале:)

1 Ответ

2 голосов
/ 18 ноября 2010

Чтобы преобразовать обычные строки base-10 в числа, вы берете каждый символ слева направо, конвертируете его в его числовое значение (от 0 до 9) и добавляете его к сумме, которая у вас уже есть (которую вы инициализируете в ноль) , Если после того, как вы только что обработали, осталось больше символов, то умножьте сумму на 10. Повторяйте, пока не закончится количество символов.

Например, число 374 составляет 3 × 10 2 + 7 × 10 1 + 4 × 10 0 . Другой способ записать это, который более точно моделирует алгоритм преобразования, который я описал выше, это (((3) × 10 + 7) × 10 + 4.

Вы можете адаптировать это для обработки любой строки символов, а не только числовых символов. Вместо 10 база равна 26, так что умножьте на это. И вместо цифр символы от a до z . Пример строки будет оцениваться так: ((( l ) × 26 + m ) × 26 + a ) × 26 + o . Подставьте цифры для этих букв, и вы получите 219 742.

Вот код для этого. Это не проверяет на ошибки; предполагается, что строка будет содержать только допустимые символы и что строка не будет представлять число, которое слишком велико, чтобы поместиться в переменную Integer.

function SpecialStrToInt(const s: string): Integer;
var
  i: Integer;
  subtotal: Integer;
  c: Char;
  charval: Integer;
begin
  subtotal := 0;
  for i := 1 to Length(s) do begin
    c := s[i];
    charval := Ord(c) - Ord('a') + 1;
    subtotal := subtotal * 26;
    subtotal := subtotal + charval;
  end;
  SpecialStrToInt := subtotal;
end;

Странность вашего формата в том, что нет возможности представить ноль.

...