用迴圈讀取結構中變數的值 |
尚未結案
|
dzwu
一般會員 發表:13 回覆:10 積分:4 註冊:2004-06-03 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 各位前輩好: 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 發送簡訊給我 |
|
yehcwin
一般會員 發表:1 回覆:10 積分:2 註冊:2002-06-11 發送簡訊給我 |
各位前輩大家好:
結合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 發送簡訊給我 |
|
dzwu
一般會員 發表:13 回覆:10 積分:4 註冊:2004-06-03 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
|
dzwu
一般會員 發表:13 回覆:10 積分:4 註冊:2004-06-03 發送簡訊給我 |
引言: 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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
引言: 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改寫的。感謝各位前輩的幫忙,謝謝啦~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |