zoukankan      html  css  js  c++  java
  • Delphi中常用字符串处理函数

    1.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回.
    假设str为'abcdef',copy(str,3,2)='cd',copy(str,4,10)='def' 
    2.concat(str1,str2{,strn}) 把各自变量连接起来,返回连接后的字符串(长度不能超过255) 
    3.length(str)       返回str的字符个数,即其长度. 
    4.pos(obj,target)   在target字符串中找出第一个出现obj的第一个字符位置,如果找不到,返回0. 
    5.AnsiStrLastChar('你好')结果是“好”。如果有半个汉字出现,返回这半个汉字。二者字符串长度分别为2和1。 
    6.CompareStr  - 区分大小写 
    7.CompareText - 不区分大小写 
    8.StringReplace(const S, OldPattern, NewPattern: string;Flags: TReplaceFlags): string;
    字符串替换函数,需要引用SysUtils单元
    rfReplaceAll:全部替换 
    rfIgnoreCase:忽略大小写
    使用方法Lg:
      str:='01231142211655767';//需要把:替换成----
    s:=StringReplace(str,'','----',[rfReplaceAll]);
    For Example:
    
    var
    aStr: String;
    begin
    aStr := 'This is a book, not a pen!';
    ShowMessage(StringReplace (aStr, 'a', 'two', []));   //This is two book, not a pen!只替换了第一个符合的字
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));
    //This is two book, not two pen!替换了所有符合的字
    aStr := 'This is a book, not A pen!';
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));   //This is two book, not A pen!只替换了符合的字(小写a)
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll, rfIgnoreCase]));   //This is two book, not two pen!不管大小写替换了所有符合的字
    end;
    
    9.delete 是删除一个 字符串中的 某部分字符
    用法是 delete(str,//被删除的字符串 
                  index,//从第几个字符开始删除
                  count //删除几个
                  );
    Delete(S, 2, 2); 就是从S中的第二个开始删除,删除2个字符即2、3.所以结果是145. 
    ////////////////////////////////////////////////////////
    LEFTSTR, MIDSTR, RIGHTSTR的介绍
    这几个函数都包含在StrUtils中,所以需要uses StrUtils; 
    假设字符串是 Dstr := ’Delphi is the BEST’, 那么 
    LeftStr(Dstr, 5) := ’Delph’ 
    MidStr(Dstr, 6, 7) := ’i is th’ 
    RightStr(Dstr, 6) := ’e BEST’
    
    
    
    8.{判断字符是否是数字} 
    function IsDigit(ch: char): boolean; 
    begin 
      Result := ch in ['0'..'9']; 
    end; 
    
    9{判断字符是否是大写字符} 
    function IsUpper(ch: char): boolean; 
    begin 
      Result := ch in ['A'..'Z']; 
    end; 
    10{判断字符是否是小写字符} 
    function IsLower(ch: char): boolean; 
    begin 
      Result := ch in ['a'..'z']; 
    end; 
    11{转换为大写字符} 
    function ToUpper(ch: char): char; 
    begin 
      Result := chr(ord(ch) and $DF); 
    end; 
    12{转换为小写字符} 
    function ToLower(ch: char): char; 
    begin 
      Result := chr(ord(ch) or $20); 
    end; 
    { Capitalizes first letter of every word in s } 
    
    function Proper(const s: string): string; 
    var 
      i: Integer; 
      CapitalizeNextLetter: Boolean; 
    begin 
      Result := LowerCase(s); 
      CapitalizeNextLetter := True; 
      for i := 1 to Length(Result) do 
      begin 
        if CapitalizeNextLetter and IsLower(Result[i]) then 
          Result[i] := ToUpper(Result[i]); 
        CapitalizeNextLetter := Result[i] = ' '; 
      end; 
    end; 
    //////////////////////////////////////////////////////////// 
    13.{返回两个子字符串之间字符的个数} 
    Function p2pcount( s, ss1, ss2 : string ): integer; 
    var i, j, slen : integer; 
    begin 
       i := pos( ss1, s ); 
       j := pos( ss2, s ); 
       slen := Length(ss2); 
       if j >= i then Result := j - i + slen else Result := 0; 
    end; 
    14.{更快速的字符查询,快40%} 
    function ScanStr(ToScan: PChar; Sign: Char):PChar; 
    begin 
      Result:= nil; 
      if ToScan <> nil then 
        while (ToScan^ <> #0) do begin 
          if ToScan^ = Sign then begin 
            Result:= ToScan; 
            break; 
           end; 
         inc(ToScan); 
        end; 
    end; 
    ///////////////////////////// 
    15.替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。 
    function replacing(S,source,target:string):string; 
    var site,StrLen:integer; 
    begin 
    {source在S中出现的位置} 
    site:=pos(source,s); 
    {source的长度} 
    StrLen:=length(source); 
    {删除source字符串} 
    delete(s,site,StrLen); 
    {插入target字符串到S中} 
    insert(target,s,site); 
    {返回新串} 
    replacing:=s; 
    end; 
    /////////////////////// 
    另两个替换字符串中子串的函数 
    function repl_substr( sub1, sub2, s: string ): string; 
    var i: integer; 
    begin 
       repeat 
         i := pos( sub1, s ) ; 
         if i > 0 then begin 
           delete( s, i, Length(sub1)); 
           insert( sub2, s, i ); 
         end; 
       until i < 1; 
       Result := s; 
    end; 
    function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String; 
    Var Position: Integer; 
        TempStr: String; 
    begin 
      Position := Pos(ReplacePiece,S); 
      if Position > 0 then Begin 
        TempStr := S; 
        Delete(TempStr,1,Position-1+Length(ReplacePiece)); 
        Result := 
    Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith) 
      End else Result := S; 
    end; 
    //////////////////////// 
    替换全部子字符串的函数 
      function ReplaceSub(str, sub1, sub2: String): String; 
        var 
        aPos: Integer; 
        rslt: String; 
      begin 
        aPos := Pos(sub1, str); 
        rslt := ''; 
        while (aPos <> 0) do begin 
          rslt := rslt + Copy(str, 1, aPos - 1) + sub2; 
          Delete(str, 1, aPos + Length(sub1)); 
          aPos := Pos(sub1, str); 
        end; 
        Result := rslt + str; 
      end; 
    ///////////////////////// 
    在字符串左右填充指定数量的指定字符 
    function UT_PadString(inString :string; maxLength :integer; padChar :char; 
    left :boolean) :string; 
    begin 
      result := inString; 
      while (Length(result) < maxLength) do 
        if (left) then 
          result := padChar + result 
        else 
          result := result + padChar; 
    end; 
    ///////////////////////////////////// 
    提取字符串中指定子字符串前的字符串 
    Function Before ( string ; Var S:string ) : string ; < /span>
      Var 
      F : Word ; 
    begin 
      F := POS (Src,S) ; 
      if F=0 then 
        Before := S 
       else 
        Before := COPY(S,1,F-1) ; 
    end ; 
    ////////////////////////////////// 
    提取字符串中指定子字符串后的字符串 
    Function After ( string ; Var S:string ) : string ; < /span>
      Var 
      F : Word ; 
    begin 
      F := POS (Src,S) ; 
      if F=0 then 
        After := '' 
       else 
        After := COPY(S,F+length(src),length(s)) ; 
    end ; 
    //////////////////////////////////// 
    判断字符串是否可以转换为整数 
    function IsIntStr(const S: string): boolean; 
    begin 
      Result:=StrToIntDef(S,0)=StrToIntDef(S,1); 
    end; 
    ////////////////////////////////////// 
    从字符串中删除指定字符串 
    procedure RemoveInvalid(what, where: string): string; 
      var 
      tstr: string; 
    begin 
      tstr:=where; 
      while pos(what, tstr)>0 do 
        tstr:=copy(tstr,1,pos(what,tstr)-1) + 
           copy(tstr,pos(what,tstr)+length(tstr),length(tstr)); 
      Result:=tstr; 
    end; 
    用法: 
      NewStr:=RemoveInvalid('<invalid>','This <invalid> is my string and I wan to 
           remove the word <invalid>'); 
    /////////////////////////////////////////// 
    根据某个字符分割字符串的函数 
    procedure SeparateTerms(s : string;Separator : char;Terms : TStringList); 
    { This browses a string and divide it into terms whenever the given 
      separator is found. The separators will be removed } 
      var 
      hs : string; 
      p : integer; 
    begin 
      Terms.Clear; // First remove all remaining terms 
      if Length(s)=0 then   // Nothin' to separate 
        Exit; 
      p:=Pos(Separator,s); 
      while P<>0 do 
      begin 
        hs:=Copy(s,1,p-1);   // Copy term 
        Terms.Add(hs);       // Add to list 
        Delete(s,1,p);       // Remove term and separator 
        p:=Pos(Separator,s); // Search next separator 
      end; 
      if Length(s)>0 then 
        Terms.Add(s);        // Add remaining term 
    end; 
    ========== 
    = 用  法 
    ========== 
    var 
    Terms : TStringList; 
    i : integer; 
    const 
    TestStr = '1st term;2nd term;3rd term'; 
    begin 
      Terms:=TStringList.Create; 
      SeparateTerms(TestStr,';',Terms); 
      for i:=0 to terms.Count-1 do 
        ShowMessage(Terms.Strings[i]); 
      Terms.Free; 
    end; 
    ///////////////////////////// 
    根据一组字符分割字符串的函数 
    type 
    Charset = set of Char; 
    var 
    f : Text; 
    s : String; 
    procedure WriteStringSplitted(var s: String; Separators: Charset); 
    var 
    a,e : Integer;  {anfang und ende des w鰎tchens} 
    begin 
    a := 1; 
    for e := 1 to Length(s) do 
      if s[e] in Separators then begin 
       WriteLn(Copy(s, a, e-a)); 
       a := e + 1; 
      end; 
      WriteLn(Copy(s, a, e-a+1)); 
    end; 
    begin 
    Assign(f, 'c:/dingsbums/text.txt'); 
    Reset(f); 
    while not EOF(f) do begin 
      ReadLn(f,s); 
      WriteStringSplitted(s, [':', ',']); 
    end; 
    Close(f); 
    end. 
    ////////////////////////////////////////////////// 
    {===============================================================} 
    { 函数  : RESULTSTRING = HexToBin(HEXSTRING) 
    { 目的   : 把十六进制字符串转换为二进制字符串 
    { 
    {===============================================================} 
    { 函数  : RESULTINTEGER = HexCharToInt(HEXCHAR) 
    { 目的   : 转换一个十六进制字符为整数 
    {===============================================================} 
    { 函数  : RESULTSTRING = HexCharToBin(HEXCHAR) 
    { 目的   : 转换一个十六进制字符为二进制字符串 
    {===============================================================} 
    { 函数  : RESULTINTEGER = Pow(BASE,POWER) 
    { 目的   : 指数函数 
    {===============================================================} 
    { 函数  : RESULTINTEGER = BinStrToInt(BINSTRING) 
    { 目的   : 把二进制字符串转换为整数 
    {===============================================================} 
    { 函数  : RESULTSTRING = DecodeSMS7Bit (PDUSTRING) 
    { 目的   : 解码一个7-bit SMS (GSM 03.38) 为ASCII码 
    {===============================================================} 
    { 函数  :  RESULTSTRING = ReverseStr (SOURCESTRING) 
    { 目的   : 反转一个字符串 
    {===============================================================} 
    unit BinHexTools; 
    interface 
    function HexToBin(HexNr : string): string; 
    function HexCharToInt(HexToken : char):Integer; 
    function HexCharToBin(HexToken : char): string; 
    function pow(base, power: integer): integer; 
    function BinStrToInt(BinStr : string) : integer; 
    function DecodeSMS7Bit(PDU : string):string; 
    function ReverseStr(SourceStr : string) : string; 
    implementation 
    uses sysutils, dialogs; 
    function HexCharToInt(HexToken : char):Integer; 
    begin 
      {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32); 
      { use lowercase aswell } 
      Result:=0; 
      if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 } 
         Result:=Ord(HexToken)-48 
      else if (HexToken>#64) and (HexToken<#71) then  { chars A....F } 
         Result:=Ord(HexToken)-65 + 10; 
    end; 
    function HexCharToBin(HexToken : char): string; 
    var DivLeft : integer; 
    begin 
        DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN } 
        Result:=''; 
                                           { Use reverse dividing } 
        repeat                             { Trick; divide by 2 } 
          if odd(DivLeft) then             { result = odd ? then bit = 1 } 
            Result:='1'+Result             { result = even ? then bit = 0 } 
          else 
            Result:='0'+Result; 
          DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 } 
        until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits } 
    end; 
    function HexToBin(HexNr : string): string; 
    { only stringsize is limit of binnr } 
    var Counter : integer; 
    begin 
      Result:=''; 
      for Counter:=1 to length(HexNr) do 
        Result:=Result+HexCharToBin(HexNr[Counter]); 
    end; 
    function pow(base, power: integer): integer; 
    var counter : integer; 
    begin 
      Result:=1; 
      for counter:=1 to power do 
        Result:=Result*base; 
    end; 
    function BinStrToInt(BinStr : string) : integer; 
    var counter : integer; 
    begin 
      if length(BinStr)>16 then 
        raise ERangeError.Create(#13+BinStr+#13+ 
                'is not within the valid range of a 16 bit binary.'+#13); 
      Result:=0; 
      for counter:=1 to length(BinStr) do 
          if BinStr[Counter]='1' then 
            Result:=Result+pow(2,length(BinStr)-counter); 
    end; 
    function DecodeSMS7Bit(PDU : string):string; 
    var OctetStr : string; 
        OctetBin : string; 
        Charbin  : string; 
        PrevOctet: string; 
        Counter  : integer; 
        Counter2 : integer; 
    begin 
      PrevOctet:=''; 
      Result:=''; 
      for Counter:=1 to length(PDU) do 
        begin 
          if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous } 
            begin 
              if BinStrToInt(PrevOctet)<>0 then 
                Result:=Result+Chr(BinStrToInt(PrevOctet)) 
              else Result:=Result+' '; 
              PrevOctet:=''; 
            end; 
          if Odd(Counter) then            { only take two nibbles at a time } 
            begin 
              OctetStr:=Copy(PDU,Counter,2); 
              OctetBin:=HexToBin(OctetStr); 
              Charbin:=''; 
              for Counter2:=1 to length(PrevOctet) do 
                Charbin:=Charbin+PrevOctet[Counter2]; 
              for Counter2:=1 to 7-length(PrevOctet) do 
                Charbin:=OctetBin[8-Counter2+1]+Charbin; 
              if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin)) 
                else Result:=Result+' '; 
              PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1); 
            end; 
        end; 
    end; 
    function ReverseStr(SourceStr : string) : string; 
    var Counter : integer; 
    begin 
      Result:=''; 
      for Counter:=1 to length(SourceStr) do 
        Result:=SourceStr[Counter]+Result; 
    end; 
    end.  

    转发于:https://blog.csdn.net/mrwlw/article/details/78238434

  • 相关阅读:
    1373:鱼塘钓鱼(fishing)
    1261:【例9.5】城市交通路网
    1259:【例9.3】求最长不下降序列
    1260:【例9.4】拦截导弹(Noip1999)
    1258:【例9.2】数字金字塔
    1261:【例9.5】城市交通路网
    1260:【例9.4】拦截导弹(Noip1999)
    1259:【例9.3】求最长不下降序列
    1257:Knight Moves
    [HAOI2008]硬币购物(动态规划、容斥、搜索)
  • 原文地址:https://www.cnblogs.com/hhmm99/p/10613708.html
Copyright © 2011-2022 走看看