我有一串随机数字 (数字只能使用一次,只能使用1-9,几乎任何长度(最小1,最大9)):
var
Input: String;
begin
Input := '431829576'; //User inputs random numbers
现在我需要获得指定的号码。 5
。
var
Number: Integer;
begin
Number := 5;
并且函数以结果543182976
执行。
我对如何制作这样的功能没有任何想法,谢谢。
答案 0 :(得分:9)
你的意思是这样吗?
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;
答案 1 :(得分:4)
你可以这样做:
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;
如果Digit不在输入字符串中,则此处不会添加数字,但如果它不适合您的实现,请更改此数字。
答案 2 :(得分:2)
这是一个减少所需字符串分配数量的解决方案,并检查数字是否已经在前面:
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;