字串拆解的問題 |
答題得分者是:m8815010
|
Teresa_Chang
一般會員 發表:41 回覆:42 積分:16 註冊:2004-05-04 發送簡訊給我 |
我寫了一個很基本的字串拆解的程式,
以下是我的程式
int i=0;
char Split[5][5];
char str[30];
char *tok=NULL; strcpy(str,encode_data.c_str());
tok = strtok(str,",");
while (tok!=NULL )
{
strcpy(Split[i],tok);
i ;
tok = strtok(NULL, ",");
} 但是我用這個字串(10,T,01,70,37.54,24"44.7322N,12"144.7045E)測試時, 當它碰到.和"就無法準確的利用,來區分每一個字串了, 這是為什麼呢?
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
我把你的程式改成以下的...
int i=0; char Split[40][5]; char str[40]; char *tok=NULL; AnsiString encode_data; encode_data="10,T,01,70,37.54,24\"44.7322N,12\"144.7045E"; strcpy(str,encode_data.c_str()); tok = strtok(str,","); while (tok!=NULL ) { strcpy(Split[i],tok); Edit2->Text=Edit2->Text Split[i] " "; i ; tok = strtok(NULL, ","); }我這樣可以正常區分字串,我不清楚你要的是怎樣的,先改成這樣你看是不是 |
Teresa_Chang
一般會員 發表:41 回覆:42 積分:16 註冊:2004-05-04 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 以下是利用memo的方式呈現我自行測試的結果 10 T 01 70 37.5424\"41210 24\"41210 1210 還是一樣的結果。 ================================================================= 另外,我用了你寫的方式再從做了一次測試,測試的結果如下: 10 T 01 70 37.54 24\"44.7322N 1210 最後一筆資料還是怪怪的, 請問一下問題到底出在哪?Teresa_Chang你好< >: 你印出的結果不對吧< >?? 因為結果不管對或是錯都不應該會有反斜線“\”出現在結果字串中吧! 也就是在原來的encode_data字串中加入的“\”並不會出現在結果中,這應該就不用解釋了吧! class="code">char str[40]; 因為encode_data這個字串的長度是41,所以把它copy入str時,會把str這個字串塞滿,造成str字串無法有terminal character “\0”的存在,也就是str這個字串不知道最後是在那結尾,所以最後一筆資料會異常! 所以最快改法只要改成: char str[41] 之後,GGL大的程式就正確了! 反正有類似strcpy這樣的動作時,一定要注意不可有超過長度的情況發生! 所以最後解應如: 10 T 01 70 37.54 24"44.7322N 12"144.7045E 最後講一下,Teresa_Chang應該是用Builder撰寫程式,那就用VCL元件撰寫理應簡單明了些: void __fastcall TForm1::Button2Click(TObject *Sender) { AnsiString encode_data="10,T,01,70,37.54,24\"44.7322N,12\"144.7045E"; TStringList* sl=new TStringList; sl->CommaText=encode_data; ShowMessage(sl->Count); <--印出拆出的資料總筆數 for (int i=0;iAll! |
ubong
一般會員 發表:2 回覆:42 積分:23 註冊:2002-10-02 發送簡訊給我 |
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
引言:引言: 以下是利用memo的方式呈現我自行測試的結果 10 T 01 70 37.5424\"41210 24\"41210 1210 還是一樣的結果。 ================================================================= 另外,我用了你寫的方式再從做了一次測試,測試的結果如下: 10 T 01 70 37.54 24\"44.7322N 1210 最後一筆資料還是怪怪的, 請問一下問題到底出在哪?Teresa_Chang你好< >: 你印出的結果不對吧< >?? 因為結果不管對或是錯都不應該會有反斜線“\”出現在結果字串中吧! 也就是在原來的encode_data字串中加入的“\”並不會出現在結果中,這應該就不用解釋了吧! class="code">char str[40]; 因為encode_data這個字串的長度是41,所以把它copy入str時,會把str這個字串塞滿,造成str字串無法有terminal character “\0”的存在,也就是str這個字串不知道最後是在那結尾,所以最後一筆資料會異常! 所以最快改法只要改成: char str[41] 之後,GGL大的程式就正確了! 反正有類似strcpy這樣的動作時,一定要注意不可有超過長度的情況發生! 所以最後解應如: 10 T 01 70 37.54 24"44.7322N 12"144.7045E 最後講一下,Teresa_Chang應該是用Builder撰寫程式,那就用VCL元件撰寫理應簡單明了些:void __fastcall TForm1::Button2Click(TObject *Sender) { AnsiString encode_data="10,T,01,70,37.54,24\"44.7322N,12\"144.7045E"; TStringList* sl=new TStringList; sl->CommaText=encode_data; ShowMessage(sl->Count); <--印出拆出的資料總筆數 for (int i=0;iAll! >>< face="Verdana, Arial, Helvetica"> 其實我在寫的時候沒注意到他的陣列大小是41,我只知道一開始的陣列大小太小了,就隨便改成40,想不到我跑出來的結果好像沒錯就po上來了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |