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

如何回傳一個陣列?

尚未結案
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-18 01:42:16 IP:219.81.xxx.xxx 未訂閱
底下程式碼該怎麼改才對? const int ArraySize=5; AnsiString ar2[] get135(AnsiString ar[]); main() { AnsiString ss[ArraySize]={"1","2","3","4","5"}; AnsiString ar2[ArraySize]; .............. .............. ar2=get135(ss); } AnsiString ar2[] get135(AnsiString ar[]) { ............. ............. return ar; }
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-18 09:24:41 IP:211.76.xxx.xxx 未訂閱
AnsiString ar2[] get135(AnsiString ar[]);
你這一行,是要對ar2還是get135宣告?
AnsiString ar2(AnsiString ar);
AnsiString get135(AnsiString ar);
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-18 11:29:27 IP:219.81.xxx.xxx 未訂閱
我把原程式完整貼出好了.
 
const int ArraySize=5;
void get135(AnsiString ar[]);    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  AnsiString ss[ArraySize]={"1","2","3","4","5"};
  AnsiString total;
  total="";
  for (int i=0;i<5;i  )
      total=total ss[i];
  Label1->Caption=total;
  get135(ss);    }
//----------------------------------------------------------------
void get135(AnsiString ar[])
{
   AnsiString tt="";
   for (int j=0;j<5;j=j 2)
       {
        tt=tt ar[j];
        ar[j]=ar[j] 1;
       }
   Form1->Label2->Caption=tt;
   //return ar;
}
我要在最在把ar[]處理的結果回傳,請問宣告的地方和呼叫要如何表示?
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-18 13:38:07 IP:211.76.xxx.xxx 未訂閱
AnsiString get135(AnsiString ar[])
{
   AnsiString tt="";
   for (int j=0;j<5;j=j 2)
       {
        tt=tt ar[j];
        ar[j]=ar[j] 1;
       }
   Form1->Label2->Caption=tt;
   return *ar;
}
你改成上面這樣試試看....
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-18 16:17:06 IP:163.28.xxx.xxx 未訂閱
那這行get135(ss); 不需給一個陣列讓它接嗎? 例如: ar2=get135(ss); 因為我要把回傳值給另一個array. 我試過了並不行,可以再告訴我如何改嗎? 謝謝.
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-18 20:36:51 IP:211.76.xxx.xxx 未訂閱
  AnsiString temp,ar2[ArraySize];
  temp=get135(ss);
  for(int i=0;i
我目前只知道這樣寫....我覺得既然你已經用AnsiString了
可以改成
AnsiString get135(AnsiString ar)
{
   AnsiString tt="";
   for (int j=0;j<5;j=j+2)
       {
        //tt=tt+ar[j];
        //ar[j]=ar[j]+1;
        我不清楚你上面這行是要做什麼目的ㄝ...是要字串+1嗎?
        還是數字+1
        
        tt+=ar.SubString(j+1,1);
        
       }
   Form1->Label2->Caption=tt;
   return ar;
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString ss="12345";
  AnsiString total;
  Label1->Caption=ss;      AnsiString temp,ar2;
  temp=get135(ss);
  ShowMessage(get135(ss));
}
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-18 22:34:37 IP:163.28.xxx.xxx 未訂閱
恩,非常謝謝你.. 可能我的範例程式沒表示好.底下是改過比較好了解的程式.
const int ArraySize=5;
AnsiString get135(AnsiString ar[]);
AnsiString total;
AnsiString ss2;
//--------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  AnsiString ss[ArraySize]={"aa","bb","cc","dd","ee"};
  total="";
  for (int i=0;i<5;i  )
      total=total ss[i];
  Label1->Caption=total;    //原本的
  ss2=get135(ss);      Label8->Caption=ss2[0];   //回傳改過的再顯示到Label8
  Label9->Caption=ss2[1];   //回傳改過的再顯示到Label9
  Label10->Caption=ss2[2];  //回傳改過的再顯示到Label10
  Label11->Caption=ss2[3];  //回傳改過的再顯示到Label11
  Label12->Caption=ss2[4];  //回傳改過的再顯示到Label12
}
//--------------------------------------------------------------------
AnsiString get135(AnsiString ar[])
{
   for (int j=0;j<5;j=j 5)
        ar[j]=ar[j] "1";
   total="";
   for (int k=0;k<5;k  )
        total=total ar[k];
   Form1->Label2->Caption=total;   //改過的       Form1->Label3->Caption=ar[0];   //改過的再顯示到Label3
   Form1->Label4->Caption=ar[1];   //改過的再顯示到Label4
   Form1->Label5->Caption=ar[2];   //改過的再顯示到Label5
   Form1->Label6->Caption=ar[3];   //改過的再顯示到Label6
   Form1->Label7->Caption=ar[4];   //改過的再顯示到Label7       return* ar ;
}
不過我的目的以字串陣列傳出,當回傳時,也是以一個字串陣列回傳,而不是把它弄成一整個AnsiString回傳,不知是否有辦法這樣傳? 謝謝.
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-19 05:54:42 IP:211.76.xxx.xxx 未訂閱
我弄了很久...還是試不出來,以下的方法雖然有點濫...還是可以用 AnsiString ss2[5];  //宣告成全域變數
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString total;      AnsiString ss[5]={"aa","bb","cc","dd","ee"};
  total="";
  for (int i=0;i<5;i  )
      total=total ss[i];
  Label1->Caption=total;    //原本的
  get135(ss);
  Label8->Caption=ss2[0];   //回傳改過的再顯示到Label8
  Label9->Caption=ss2[1];   //回傳改過的再顯示到Label9
  Label10->Caption=ss2[2];  //回傳改過的再顯示到Label10
  Label11->Caption=ss2[3];  //回傳改過的再顯示到Label11
  Label12->Caption=ss2[4];  //回傳改過的再顯示到Label12    }
//---------------------------------------------------------------------------
AnsiString *get135(AnsiString * ar)
{
   for (int j=0;j<5;j=j 5)
        ar[j]=ar[j] "1";       AnsiString total="";
   for (int k=0;k<5;k  )
        total=total ar[k];
   Form1->Label2->Caption=total;   //改過的       Form1->Label3->Caption=ar[0];   //改過的再顯示到Label3
   Form1->Label4->Caption=ar[1];   //改過的再顯示到Label4
   Form1->Label5->Caption=ar[2];   //改過的再顯示到Label5
   Form1->Label6->Caption=ar[3];   //改過的再顯示到Label6
   Form1->Label7->Caption=ar[4];   //改過的再顯示到Label7
   ss2[0]=ar[0];
   ss2[1]=ar[1];
   ss2[2]=ar[2];
   ss2[3]=ar[3];
   ss2[4]=ar[4];    }
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-19 13:26:54 IP:163.28.xxx.xxx 未訂閱
恩,大致上了解了. 非常謝謝你的幫忙..
系統時間:2024-07-02 1:53:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!