有个字符串,中间用“ - ”隔开,我要把“-”前后的字符分别放到一个字符数组中。
例如:
str:string;//str的长度是不固定的
str_array:array[1..4] of sting;str='002-0568-987-458a',我要把str这个字符串的字符分别存到数组str_array中,str_array[1]='002',
str_array[2]='0568',
str_array[3]='987',
str_array[4]='458a',请问如何编程把str='002-0568-987-458a'存入数组str_array中呢?

解决方案 »

  1.   

    delphi有很多操作字符的方法copy,pos,delete等
    自己多试
      

  2.   

    str_array[1]=Copy(str,1,3);
    str_array[2]=Copy(str,5,8);
    str_array[3]=Copy(str,10,12);
    str_array[4]=Copy(str,14,17);ok了...
      

  3.   

    用pdbird(老巢) 的方法正确,但还要在USES中加一句:
    USES
      strutils;
      

  4.   

    Copy函数可以实现你的工能的
    三个参数的含义是:目标字符串,开始位置,长度
      

  5.   

    问题是我的根本不知道每个要存入到字符数组的字符串的长度,比如str='asdfasdfa-0-asdf-df'我就不能用上面的方法了。请给些其他的方法。
      

  6.   

    我有一个c语言的函数和DELPHI差不多,你自己改一下把
    void substr1( char *s, int ino, char  *cout)
    {
        char *fp1, *fp2;
    int i,ch='-', result;

        if (ino <= 0) {
    cout[0] = '\0';
    return;
    }

        fp1 = s;
    for (i=1; i<ino; i++)
    {
    fp2 = strchr(fp1, ch);
    if(fp2) {
    fp1 = fp2+1;  //指针定位到“|”后的第一个字符上
    } else {
    fp1 = NULL;
    break;
    }
    }
    // fp1为要查找的字符串前的一个“|”的位置 fp2为要查找的字符串后的一个“|”的位置
    if (fp1)
    fp2 = strchr(fp1, ch);

        if (fp1) {
    if(fp2) {
    result = fp2-fp1;
    for (i=0; i<result; i++)
    {
    cout[i] = *(fp1+i);
    }
    cout[result] = '\0';
    }
    else
    strcpy(cout,fp1);
    }
    else
    cout[0]='\0';//没找到输出空串
    }
      

  7.   

    str='asdfasdfa-0-asdf-df';i:=pos('-',str);  //得到'-'在字符串中的位置ss:=copy(str,1,i-1);
    用这个思路,做个循环就好了。
      

  8.   

    来一个变态的解决办法:
    var
      aStrs: TStrings
    begin
      aStrs := TStringList.Create;
      try
        aStrs.Delimiter := '-';
        aStrs.DelimitedText := '12345-34567-2-34';
        ShowMessage(aStrs[1]); //34567;
      finally
        aStrs.Free;
      end;
    end;
    用一个Strings就行了,这样赋值之后每行就是被'-'分隔的部分,如果你真的要放到数组,那就循环赋值吧
      

  9.   

    str_array[1]=Copy(str,1,3);
    str_array[2]=Copy(str,5,8);
    str_array[3]=Copy(str,10,12);
    str_array[4]=Copy(str,14,17);
      

  10.   

    另外,对于有多个“-”,由于你不知道长度,可以用Pos函数找到第一个-号,处理完后,用System.Delete把处理过的字符串切掉,再继续处理其他的
      

  11.   

    const
    TestStr = '1st term;2nd term;3rd term';//加在USE 和TYPE中间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;==========
    = 用  法 
    ==========
    //加一个按钮,在ONCLICK中写:
    var
    Terms : TStringList;
    i : integer;begin
      Terms:=TStringList.Create;
      SeparateTerms(TestStr,';',Terms);
      for i:=0 to terms.Count-1 do
        ShowMessage(Terms.Strings[i]);
      Terms.Free;
    end;