对如下字符串(其中姓名可能为2到4个字符):
“姓名★”
如何只将★前的姓名截取出来?

解决方案 »

  1.   

    var
      namestr: ansistring;
      pos: int;
    begin
      namestr := '姓名*'
      namestr := copy(namestr,1,pos(namestr,'*')-1)
    end
      

  2.   

    正确的方法是使用WideString类型var
      sValue: WideString;
      sName: WideString;
      iPos: Integer;
    begin
      sValue := '姓名★';
      sName := sValue;
      iPos := Pos('★', sValue);
      if iPos > 0 then
        sName := Copy(sValue, 1, iPos - 1);
      ShowMessage(sName);
    end;
      

  3.   

    var 
    i:integer;
    s:string;
    begin
     for i to Length(Str)-1 do begin
      if Str[i]='*' then
       s:=str[i];
     end;
    end;上面不能编译  你需要自己修改  如果需要更详细的代码可以到网络中查 JVL或者JCL中都有相关的代码  VCL中也有 只是你没发现
      

  4.   

    楼主的问题不够明确。如果后面的一定是★就可以用判断★的方法,但如果还可能是其它字符,就得用 bigery(bigery) 提出的方法了
    一个一个找出汉字(先确定汉字编码的范围),不是汉字就结束。
      

  5.   

    菜鸟我也来发表一下意见.其实DELPHI的帮助中有很多字符串的截取函数,可以从左边右边截取.还有反取查找定位什么的.可以自己去看一下VCL的帮助嘛.
      

  6.   

    不建议使用WideChar  这里面涉及到unicode的问题
      

  7.   

    给你一个函数,我自己写的,能用,但没优化。呵。调用方式如: TempGetStr:=GetSubstr('姓名★','★',1);//得到在s_str中的第po位字符串,以d_str为分隔。
    function GetSubstr(s_str, d_str: string; po: integer): string; //s_str大字符串,d_str分隔符,po位置
    var
      i, j, k: integer;
    begin
      Result := '';
      if po < 1 then
        exit;
      s_str := trim(s_str) + d_str;
      i := 0;
      while 1 = 1 do
      begin
        if Pos(d_str, s_str) > 0 then
        begin
          j := Pos(d_str, s_str) + length(d_str);
          k := length(s_str) - (j - 1);
          i := i + 1;
          if i = po then
          begin
            j := Pos(d_str, s_str);
            Result := copy(s_str, 1, j - 1);
            break;
          end;
          s_str := copy(s_str, j, k);
        end
        else
          break;
      end;
    end;一般结合下面的函数用,也是我写的,有哪位高手有时间把我这两个函数优化一下,谢谢啦。//得到substr在str中出现的次数
    function GetAppearTimes(Substr, Str: string): integer;
    var
      i: integer;
      lstr: string;
    begin
      lstr := Str;
      i := 0;
      while Pos(Substr, lstr) > 0 do
      begin
        i := i + 1;
        lstr := copy(lstr, Pos(Substr, lstr) + length(Substr), length(lstr) - length(Substr));
      end;
      Result := i;
    end;