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

用迴圈讀取結構中變數的值

尚未結案
dzwu
一般會員


發表:13
回覆:10
積分:4
註冊:2004-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-08 16:55:57 IP:61.66.xxx.xxx 未訂閱
各位前輩好:    typedef struct{     char a1[4];     char a2[4];             :     char a10[4]; } my_type;    my_type my;    String str; str = ""; for(i=0;i<10;i ){ str = ??? -> 要如何寫才能將結構a1~a10的值累加至str? } 發表人 - dzwu 於 2004/07/08 17:14:25
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-08 17:18:08 IP:203.73.xxx.xxx 未訂閱
引言: 各位前輩好: typedef struct{ char a1[4]; char a2[4]; : char a10[4]; } my_type; my_type my; String str; str = ""; for(i=0;i<10;i++){ str += ??? -> 要如何寫才能將結構a1~a10的值累加至str? }
dzwu 你好:
(1)建議你稍微改一下 struct 的結構,問題會變得更簡單
(2)請參考以下的範例程式碼
# s="" >
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
dzwu
一般會員


發表:13
回覆:10
積分:4
註冊:2004-06-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-08 17:45:39 IP:61.66.xxx.xxx 未訂閱
RaynorPao 你好: 因為a1~a10是原結構中的一部份,我其他程式也會使用到,可能不大方便修改 是不是有其他的方法可解決這個問題? 我想問題類似: char a1 = "1"; String str = "a1"; 怎麼將str的值指向"1"而不是"a1"?
yehcwin
一般會員


發表:1
回覆:10
積分:2
註冊:2002-06-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-08 18:34:22 IP:220.228.xxx.xxx 未訂閱
各位前輩大家好:  結合RaynorPao大大的想法, 和兼顧 dzwu 目前需求,  寫了下列 例子 :
 typedef struct{
  char a1[4];
  char a2[4];
  char a10[4];
 } my_type ;     class csMy_Type {
  private:
   my_type *_MyType ;
  public :
  csMy_Type( my_type MyType )
  {
   _MyType = &MyType ;
  }
  char* operator[](int y)
  {
    char *a[3]={_MyType->a1,_MyType->a2,_MyType->a10};
    return( a[y] );
  };
 } ;     my_type MyType ; // 舊的struct
 class csMy_Type clsMy_Type(MyType) ; // 新的class(當作橋樑) 
 clsMy_Type[0] ; // 類似陣列取用
 
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-08 20:50:53 IP:218.160.xxx.xxx 未訂閱
String str;
str = "";    int i;
char *p = my.a1;
for(i=0;i<10;i  ){
str  = (p 4*i);
} 
//假如裡面都是4BYTE的話.
dzwu
一般會員


發表:13
回覆:10
積分:4
註冊:2004-06-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-09 08:25:34 IP:61.66.xxx.xxx 未訂閱
引言:
引言: String str; str = ""; int i; char *p = my.a1; for(i=0;i<10;i ){ str = (p 4*i); } //假如裡面都是4BYTE的話.
brook 你好: 我試過這樣寫,但是str的值為null,如果我把str =(p 4*i);改成str =(*p 4*i);則每次讀出的只有2個bytes,而且值也不是a1~a10的值。 再麻煩你了,謝謝!
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-09 09:23:24 IP:211.76.xxx.xxx 未訂閱
這是我完整的程式,測試ok,你試試看.  
 
typedef struct{
char a1[4];
char a2[4];
char a3[4];
} my_type;    my_type my = {"111","222","333"};    String str;
str = "";    int i;
char *p = my.a1;
for(i=0;i<3;i  ){
str  = (p 4*i);
}
ShowMessage(str);
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-09 09:29:15 IP:218.170.xxx.xxx 未訂閱
試試下面的程式吧!
typedef struct{
   char a1[4];
   char a2[4];
   char a10[4];
} my_type;    my_type my;    String str;
char *ptr = (char *)&my;
str = "";
for(int i = 0;i < sizeof(my_type);i  )
{
    str  = ptr[i];
}    
dzwu
一般會員


發表:13
回覆:10
積分:4
註冊:2004-06-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-09 10:39:55 IP:61.66.xxx.xxx 未訂閱
引言: typedef struct{ char a1[4]; char a2[4]; char a10[4]; } my_type; my_type my; String str; char *ptr = (char *)&my; str = ""; for(int i = 0;i < sizeof(my_type);i ) { str = ptr[i]; }
liangnet 你好: 如果當 my = {"111","2222","3333"};會由於a1少了一位而造成最後str的值只有"111"。如果我也希望str = "111 2222 3333" 該如何做呢? 麻煩你們了,謝謝!
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-09 11:50:04 IP:218.170.xxx.xxx 未訂閱
引言: liangnet 你好: 如果當 my = {"111","2222","3333"};會由於a1少了一位而造成最後str的值只有"111"。如果我也希望str = "111 2222 3333" 該如何做呢? 麻煩你們了,謝謝!
    for(int i = 0;i < sizeof(my_type) ;i  )
{
   if (ptr[i] == 0)
   {
             for (i = i   1; i < sizeof(my_type) ; i  )
                  if (ptr[i] != 0) break;
             str  = " ";
   }
   str  = ptr[i];
}
str.Delete(str.Length() - 1,1);
//刪除最後一個字元" "
ShowMessage(str);
會由於a1少了一位而造成最後str的值只有"111" 原因是因為字串會在最後端加上0結束碼! 例如:"111" 就需要配置4個char空間來存放字串! 發表人 - liangnet 於 2004/07/09 11:53:55 發表人 - liangnet 於 2004/07/09 12:17:12 發表人 - liangnet 於 2004/07/09 12:18:20
dzwu
一般會員


發表:13
回覆:10
積分:4
註冊:2004-06-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-07-09 14:49:27 IP:61.66.xxx.xxx 未訂閱
引言: for(int i = 0;i < sizeof(my_type) ;i ) { if (ptr[i] == 0) { for (i = i 1; i < sizeof(my_type) ; i ) if (ptr[i] != 0) break; str = " "; } str = ptr[i]; } str.Delete(str.Length() - 1,1); //刪除最後一個字元" " ShowMessage(str);
liangnet 你好: my = {"1234","56","789"}; 讀取my.a1~my.a3的方式,我修改後為: char *p = my.a1; str = ""; for (int i=0;i<3;i ){ for (int j=0;j<4;j ) if (p[j]!='\0') str = p[j]; str = " "; p = 4; } str.Delete(str.Length(),1); ShowMessage(str); 整理一下我試了之後的心得: (1)結構中a1連續佔滿4bytes會將'\0'蓋掉,所以第一次p="123456", 我用迴圈j讀取前面4bytes (2)加上'\0'的判斷是因為在'6'之後有'\0',再加上"789"還是只顯示"1234 56 (3)str.Delete(str.Length(),1);才能將最後的" "去掉 問題已解決,至於分數只能給一個人,而我程式的寫法主要是根據liangnet改寫的。感謝各位前輩的幫忙,謝謝啦~
系統時間:2024-06-28 4:53:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!