Беда со строкой в ​​Delphi - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть случайная строка чисел
(числа могут использоваться только один раз, только от 1 до 9, практически любой длины (мин. 1, макс. 9)):

var
Input: String;
begin
Input := '431829576'; //User inputs random numbers

А теперь мне нужно вывести указанный номер на фронт .Как насчет 5.

var
Number: Integer;
begin
Number := 5;

, и функция выполняется с результатом 543182976.

У меня нет никаких идей, как создать такую ​​функцию, спасибо.

Ответы [ 3 ]

9 голосов
/ 16 ноября 2011

Вы имеете в виду, как это?

function ForceDigitInFront(const S: string; const Digit: Char): string;
begin
  result := Digit + StringReplace(S, Digit, '', []);
end;

Более легкое решение -

function ForceDigitInFront(const S: string; const Digit: Char): string;
var
  i: Integer;
begin
  result := S;
  for i := 1 to Length(S) do
    if result[i] = Digit then
    begin
      Delete(result, i, 1);
      break;
    end;
  result := Digit + result;
end;
4 голосов
/ 16 ноября 2011

Вы можете сделать это следующим образом:

function ForceDigitInFront(const S: string; const Digit: Char): string;
var
  dPos : Integer;
begin
  Result := s;
  dPos := Pos( Digit,S);
  if (dPos <> 0) then begin  // Only apply Digit in front if Digit exists !?
    Delete( Result,dPos,1);
    Result := Digit + Result;
  end;
end;

Если цифра отсутствует во входной строке, цифра здесь не добавляется, но измените ее, если она не соответствует вашей реализации.

2 голосов
/ 17 ноября 2011

Вот решение, которое уменьшает количество необходимых распределений String, а также проверяет, находится ли цифра впереди:

function ForceDigitInFront(const S: string; const Digit: Char): string; 
var 
  dPos : Integer; 
begin 
  Result := s; 
  for dPos := 1 to Length(Result) do
  begin
    if Result[dPos] = Digit then
    begin
      if dPos > 1 then
      begin
        UniqueString(Result);
        Move(Result[1], Result[2], (dPos-1) * SizeOf(Char));
        Result[1] := Digit;
      end;
      Exit;
    end;
  end;
end; 
...