AnsiString 陣列大小 |
尚未結案
|
l8939_c
一般會員 發表:9 回覆:15 積分:4 註冊:2005-03-07 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
l8939_c 您好: 插個花! 關於這個問題,個人有兩個建議,請參考:
1.利用sizeof(.)來計算,當然前提:是陣列定義與計算在同一函式中。
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString a1[]={"1234","abcdefg","111111111"}; ShowMessage( sizeof(a1)/sizeof(a1[0]) ); }2.可不可以將結果存成 TStringList 的形式再傳回,這樣就能得到相關的長度等資訊。 RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
l8939_c
一般會員 發表:9 回覆:15 積分:4 註冊:2005-03-07 發送簡訊給我 |
感謝 supman兄 與 richtop兄的發言! supman 您的建議的確可行, 不過使用上有點麻煩, 我希望讓程式越簡潔越好
但若找不到更好的方法時, 您的方法似乎是唯一解決之道 richtop 您第一個建議, 我試過了, 由於是函數間的呼叫, 所以是以指標宣告
例: String *test_str() , 所以 sizeof(a1)/sizeof(a1[0]) = 1 , 無法滿足需求 你第二個建議提到 TStringList , 不好意思, 我沒用過, 不知這是什麼呢 ?
使用上麻不麻煩呢, 我希望我寫的函數, 別人也可以很容易使用, 所以希望
盡量簡單一點 記得以前用 VB 時, 只要使用 UBOUND() 函數, 就可得到陣列上限值
真搞不懂 C 為何這麼不方便呢
希望還有人可以幫我再提點意見..... engineer
------
engineer |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
l8939_c 您好: 其實我原本的目的是:覺得TStringList值得學習,所以提出供您參考!
底下有個簡單示範,請參考!
如果要做文字資料的處理與檔案存取,我是建議使用TStringList(under BCB)!
詳細的細節,請參考線上說明,或許真能發現使用它的好處。 < class="code">
//---------------------------------------------------------------------------
TStringList * getStrings()
{
int len;
TStringList *lst = new TStringList();
AnsiString a1[]={"1234","abcdefg","111111111"};
len = sizeof(a1) / sizeof(a1[0]);
for (int k=0; k
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
如果您使用AnsiString的話,最後添加結尾元素應該是唯一解,以前看書上也都只有使用這各方法,您沒看到連編譯器都必須再結尾元素填上 \0 ,不然他無法知道長度為多少. C的特性就是這樣,記憶體比較活用,但卻也比較危險及麻煩,像Delphi也是用Length就能得到陣列的元素個數. 至於richtop大大所提的TStringList的話就好用多了,看您的需求. 您也可以動態配置AnsiString,自己去new他,當然也會知道他有幾各.
您在以下這篇已經有問到,如何動態配置了,不多寫.
http://delphi.ktop.com.tw/topic.php?topic_id=70048 TStringList就類似一串的AnsiString的物件,您每Add一次他會自動幫您配置一各AnsiString.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *List;
List= new TStringList;
List->Add("aaa");//增加元素
List->Add("bbb");
List->Add("ccc");
ShowMessage(IntToStr(List->Count));//得到有幾各元素
ShowMessage(List->Strings[0]);得到第一各aaa的字串
List->Free();
} 發表人 - supman 於 2005/05/05 11:18:39
|
l8939_c
一般會員 發表:9 回覆:15 積分:4 註冊:2005-03-07 發送簡訊給我 |
感謝 supman,richtop 兩位大大的建議 經兩位說明, 我覺得 TStringList 用法是還蠻簡單的,不過看來 TStringList 好像就只比 String 多了->Count 的功能吧, 由於我還要對字串作一些處理
所以我還是比較習慣用 String 那我還是決定使用 supman 的建議, 不過不是在結尾加上識別符號
因為這還要用回圈才能判斷出陣列的上限值, 太麻煩了
我要將陣列大小值, 存入第0 陣列中
例如 : a[0]="15" a[1]="ssss" a[2]="ssss2" ....... a[15]="jkjkl"
實際陣列為 a[1]~a[15] , a[0] 用來存放陣列大小值
如此可免用迴圈的部分 下次有機會, 我會用 TStringList 來試試
感謝兩位的幫忙 ~ engineer
------
engineer |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |