国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

兩個字符串分割函數引出的奇怪問題

2019-11-18 18:13:18
字體:
來源:轉載
供稿:網友
下面兩個函數均是對于一個字符串將其以某個分割符分開:

  function SplitStrToArray(const tString, tSplit: String): TStringList;  
     //以后成為方法1,這也是《delphi超級猛料》中提到的算法
  var
    t_Str, t_Item: WideString;
    t_Index, t_Len: Integer;
    t_StrList: TStringList;
  begin
    t_StrList := TStringList.Create();
    t_Str := tString;
    t_Len := Length(tString);
    t_Index := pos(tSplit, t_Str);  //語句1
    if t_Index > 0 then
    begin
      while t_Index > 0 do
      begin
        t_Item := LeftStr(t_Str, t_Index - 1);
        t_Str := MidStr(t_Str, t_Index + 1, t_Len);
        t_Index := Pos(tSplit, t_Str);
        if Length(t_Item) > 0 then
          t_StrList.Add(t_Item);
      end;
    end;
    if Length(t_Str) > 0 then
      t_StrList.Add(t_Str);
    Result := t_StrList;
  end;

  function SplitString(const source,ch:string):TStringList;
//以后成為方法2;
  var
    temp:string;
    i:integer;
    begin
      result:=tstringlist.Create;
      temp:=source;
      i:=pos(ch,source);
      while i<>0 do
        begin
        result.Add(copy(temp,0,i-1));
        delete(temp,1,i);
        i:=pos(ch,temp);
        end;
    result.Add(temp);
  end;

看上去兩段代碼都沒有問題,然而,實際用這兩段進行測試時:比如:
  s:='美國a,aab,中國,ddf';
  t:=SplitStrToArray(s,',');
//t:=SplitString(s,',');
  for i:=0 to t.Count-1 do
    showmessage(t.Strings[i]);

    會發現方法1不能識別中文,也就是說在有中文的字符串里面,方法一不能正確分割。而方法2可以。問題出現在哪里呢?
    我又跟蹤程序發現,兩個函數在進入循環之前都執行了一個pos( )函數,而方法1此時返回的值是4,方法2返回的就是6,所以方法1自然不能正確識別了。那么問題又來了,在他們的pos之前,兩個函數都沒有做什么奇怪的操作啊。
    再嘗試,將方法1的 語句1,即t_Index := pos(tSplit, t_Str);的pos的第二個參數修改為函數的形參tString,那么,此句t_Index的值就是正確的6,而以后的分割又錯了。
    我實在是想不通了,不知道哪位達人遇到過類似的問題,還是說我分析的不對,還是delphi的bug?


上一篇:有的程序不能運行于win98的原因

下一篇:項目迭代開發手記--文件分割存儲用例的實現過程(3)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 互助| 铜鼓县| 开阳县| 莱西市| 勐海县| 元江| 柘城县| 鄂托克旗| 柘城县| 洛扎县| 子洲县| 甘肃省| 丘北县| 贵溪市| 兴和县| 屯门区| 区。| 株洲市| 二手房| 津市市| 扎赉特旗| 漾濞| 体育| 齐齐哈尔市| 孝义市| 焦作市| 禹城市| 长乐市| 新巴尔虎右旗| 井冈山市| 宜兰市| 通海县| 邵阳市| 泰宁县| 北辰区| 怀宁县| 株洲市| 齐河县| 常熟市| 上栗县| 囊谦县|