【问题标题】:Trouble with string in DelphiDelphi中的字符串问题
【发布时间】:2011-11-16 18:03:04
【问题描述】:

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

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

现在我需要将指定的数字放在前面。 5 怎么样。

var
Number: Integer;
begin
Number := 5;

函数执行,结果为543182976。

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

【问题讨论】:

  • 那么你是如何解决你的问题的,它是如何产生错误结果的?
  • @Krom,很明显 - 将问题发布到stuckoverflaw :)
  • 为什么我的问题被否决了?

标签: string delphi delphi-7


【解决方案1】:

你的意思是这样吗?

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;

【讨论】:

  • 常量对象不能作为var参数传递Delete(result, i, 1);
  • 嘿@Andreas!在您的第一个函数中将 S 更改为 Digit。我会接受你的回答。
  • 如果S 不包含Digit 怎么办? 51234 是输入 1234 和 5 的所需输出吗?
【解决方案2】:

你可以这样做:

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;

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

【讨论】:

    【解决方案3】:

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

    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; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2011-01-26
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2023-03-19
      相关资源
      最近更新 更多