String Delphi中字符串的问题

String Delphi中字符串的问题,string,delphi,delphi-7,String,Delphi,Delphi 7,我有一个随机的数字串 (数字只能使用一次,只能从1到9,几乎任何长度(最小1,最大9)): 现在我需要把指定的号码放到前面。5怎么样 var Number: Integer; begin Number := 5; 函数以结果执行543182976 我不知道如何制作这样的函数,谢谢。你的意思是这样吗 function ForceDigitInFront(const S: string; const Digit: Char): string; begin result := Digit + S

我有一个随机的数字串
(数字只能使用一次,只能从1到9,几乎任何长度(最小1,最大9)):

现在我需要把指定的号码放到前面。
5
怎么样

var
Number: Integer;
begin
Number := 5;
函数以结果执行
543182976

我不知道如何制作这样的函数,谢谢。

你的意思是这样吗

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;

你可以这样做:

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;
函数ForceDigitInFront(常量S:string;常量Digit:Char):string;
变量
dPos:整数;
开始
结果:=s;
DPO:=位置(数字,S);
如果是(dPos 0),则开始//仅在数字存在时应用前面的数字!?
删除(结果,DPO,1);
结果:=数字+结果;
结束;
结束;

如果数字不在输入字符串中,则不会在此处添加该数字,但如果该数字不适合您的实现,请对此进行更改。

这里有一个解决方案,可以减少所需的字符串分配数量,并检查该数字是否已在前面:

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; 

那么,您如何解决您的问题以及如何得出错误的结果呢?@Krom,显然-向StuckOverlaw发布问题:)为什么我的问题被否决了?常量对象不能作为var参数
Delete(result,i,1)传递嘿@Andreas!在第一个函数中将
S
更改为
Digit
。我会接受你的回答。如果
S
不包含
数字怎么办?
51234
是否是输入
1234
5
所需的输出?
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;