線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1242
推到 Plurk!
推到 Facebook!

字串拆解的問題

答題得分者是:m8815010
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-13 19:15:08 IP:211.74.xxx.xxx 未訂閱
我寫了一個很基本的字串拆解的程式, 以下是我的程式 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-13 19:51:32 IP:211.76.xxx.xxx 未訂閱
我把你的程式改成以下的...
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-13 20:09:57 IP:211.74.xxx.xxx 未訂閱
以下是利用memo的方式呈現我自行測試的結果 10 T 01 70 37.5424\"41210 24\"41210 1210 還是一樣的結果。 ================================================================= 另外,我用了你寫的方式再從做了一次測試,測試的結果如下: 10 T 01 70 37.54 24\"44.7322N 1210 最後一筆資料還是怪怪的, 請問一下問題到底出在哪?
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-13 21:56:43 IP:210.64.xxx.xxx 未訂閱
引言: 以下是利用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;iCount;i  )
      ShowMessage(sl->Strings[i]);  <--一一印出每一筆資料     delete sl;
}
All!
ubong
一般會員


發表:2
回覆:42
積分:23
註冊:2002-10-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-13 23:16:42 IP:218.160.xxx.xxx 未訂閱
剛剛以Turbo c 試寫,應是最後因沒有","作結束所以最後會不正確, 應自行在最後一次再加上'\0'作結束。不用指標的程式碼如下  
 
void main()
{
char temp[]="10,T,01,70,37.54,24\"44.7322N,12\"144.7045E";
char str[31];
int i=0,k=0;
clrscr();
for(i=0;i.    ubong
        
------
ubong
GGL
資深會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-14 01:39:33 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 以下是利用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;iCount;i  )
      ShowMessage(sl->Strings[i]);  <--一一印出每一筆資料     delete sl;
}
All! < face="Verdana, Arial, Helvetica"> 其實我在寫的時候沒注意到他的陣列大小是41,我只知道一開始的陣列大小太小了,就隨便改成40,想不到我跑出來的結果好像沒錯就po上來了
系統時間:2024-06-29 15:51:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!