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;