全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1631
推到 Plurk!
推到 Facebook!

請問一下,要如何找1234/5678/9這字串中的第二個/是在第幾個位置呢?

尚未結案
SO-TOP
一般會員


發表:5
回覆:1
積分:1
註冊:2004-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-02 14:37:40 IP:210.68.xxx.xxx 未訂閱
各位大大,請問一下如何找1234/5678/9,當中的第二個/是在第幾個位置呢?我用pos只能找到第一個~~謝謝
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-02 15:03:42 IP:220.134.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject); Const v1 : string = '12345/67/89'; Var I : Integer; begin for I := 0 to length(v1) DO begin if v1[I] = '/' Then showmessage(inttostr(I)); end; end; ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-02 16:51:53 IP:202.62.xxx.xxx 未訂閱
您好﹗    Pos加在迴圈之中﹐就可以判斷了﹒
Var
  S : String;
  I : Integer;
begin
  S := '12345/67/89';
  While Pos('/', S)>0 do
    begin
      I := Pos('/', S);
      S[I] := '斜線處';
    end;
  end;
end;
========================= 大病初愈﹐休養調整中... =========================
------
忻晟
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-02 18:39:42 IP:210.201.xxx.xxx 未訂閱
這樣如何? function TForm1.FindOccurrence ( s : string; c : Char; Occurrence : Integer) : Integer; var i, o : Integer; begin result := 0; // 預設找不到時傳回零 if (s = '') or (Occurrence < 1) then exit; // 安全檢查 o := 0; // 預設出現次數為零 for i := 1 to Length(s) do //走訪整條字串 begin if s[i] = c then o := o 1; //如有出現,則紀錄出現次數 if o = Occurrence then begin result := i; exit; end; end; // 出現次數若為指定值,則傳回 i 值。 end; 我有測試過程式碼,沒有問題,傳回值若不為零,表示找到該字元"特定出 現次數"在字串第幾個位置。若傳回零,表示沒有出現那麼多次,甚至沒出現。
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-02 20:04:52 IP:61.62.xxx.xxx 未訂閱
Hi, 沒有現成的 function 可以用, 可以利用 PosEx function 自行寫一個通用的查找 function, 如下,    
uses StrUtils;    // SubStr 是要查找的子字串, S 是原始字串, OrdNum 是要找第幾個
function PosEx2(const SubStr, S: string; OrdNum: integer): integer;
var
  i: integer;
begin
  Result := 0;
  For i:=1 to OrdNum do
  begin
    Result := PosEx(SubStr, S, Result 1);
    if Result > 0 then
      continue
    else
    begin
      Result := 0;
      break;
    end;
  end;
end;    ....
var
  s: string;
begin
  s:='1234/5678/9';
  ShowMessage(IntToStr(PosEx2('/', s, 2)));  // show 10
end;
若是沒有 PosEx 的這個函數(delphi 6起才出現在 StrUtils), 可以自己加入,
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var
  I,X: Integer;
  Len, LenSubStr: Integer;
begin
  if Offset = 1 then
    Result := Pos(SubStr, S)
  else
  begin
    I := Offset;
    LenSubStr := Length(SubStr);
    Len := Length(S) - LenSubStr   1;
    while I <= Len do
    begin
      if S[I] = SubStr[1] then
      begin
        X := 1;
        while (X < LenSubStr) and (S[I   X] = SubStr[X   1]) do
          Inc(X);
        if (X = LenSubStr) then
        begin
          Result := I;
          exit;
        end;
      end;
      Inc(I);
    end;
    Result := 0;
  end;
end;
系統時間:2024-06-26 17:00:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!