字串拆解問題 |
|
coolstar405
一般會員 發表:2 回覆:5 積分:1 註冊:2004-03-22 發送簡訊給我 |
#include
|
g6101
高階會員 發表:22 回覆:129 積分:110 註冊:2002-06-15 發送簡訊給我 |
coolstar405您好:
參考以下程式碼(請自行修改成Console模式的程式碼)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char sarray[10][81];
Memo1->Clear();
memset(sarray,0,sizeof(sarray));
int i = 0;
char *p = Edit1->Text.c_str();
char *s; while(*p != '\0') {
s = sarray[i ];
while(*p != '\0' && *p != ',')
*s = *p ;
*s = '\0';
p ;
} for (int j=0;jLines->Add(sarray[j]);
}
}
|
coolstar405
一般會員 發表:2 回覆:5 積分:1 註冊:2004-03-22 發送簡訊給我 |
[quote]
coolstar405您好:
參考以下程式碼(請自行修改成Console模式的程式碼)
[blue]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char sarray[10][81];
Memo1->Clear();
memset(sarray,0,sizeof(sarray));
int i = 0;
char *p = Edit1->Text.c_str();
char *s; while(*p != '\0') {
s = sarray[i++];
while(*p != '\0' && *p != ',')
*s++ = *p++;
*s = '\0';
p++;
} for (int j=0;jLines->Add(sarray[j]);
}
} 啊!我看不懂....
我只是想把結果變成:
abc
d e 我才剛剛學 ><
可以麻煩你再說清楚點嗎?
感激不盡
|
g6101
高階會員 發表:22 回覆:129 積分:110 註冊:2002-06-15 發送簡訊給我 |
coolstar405您好:
我也是在學習階段,回答得不好請不要見怪.
(1)(Console Mode)控制台模式,簡單的說就是文字模式,最典型就DOS下的那種窗體,而且程式的進入點(C/C++)為main.
(2)使用二維陣列判讀比較出力,如下改為一維陣列判讀較為容易.
#include "stdio.h"
#include "string.h"
#include "conio.h" int main()
{
char *p = "abc,d,,e";
int len = strlen(p);//取得字串長度
char buf[20];//接收分割字串
memset(buf,0,sizeof(buf));//初始化字元陣列(填入空字元)
for (int i=0,j=0;i < len;i++)
{
if (p[i] == ',') {//判斷分割字元
printf("%s\n",buf);//顯示字串
memset(buf,0,sizeof(buf));//初始化字元陣列(填入空字元)
j=0; }//陣列(buf)乘載位置歸0
else {
buf[j++] = p[i]; }//將字元一一放入(buf)陣列中
}
printf("%s",buf);//顯示最後分割字串
getch();//等待鍵盤按下 return 0;
}
希望對你有幫助.
|
coolstar405
一般會員 發表:2 回覆:5 積分:1 註冊:2004-03-22 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
coolstar405您好:
PO程式碼的方式請參考版規說明
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46593
煩請修改,謝謝您的配合< > 順心< >
|
coolstar405
一般會員 發表:2 回覆:5 積分:1 註冊:2004-03-22 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
// ================================================================ // 函數名稱:_StrSeg // 中文說明:依照逗點或其他分隔符號,取出字串中某一區段 2003/10/01 // 傳 回 值: // 參 數: // 機能說明:分隔符號可以是任何字元(如逗點,分號,或是空白),甚至可以多 Byte 字串當分隔符號 // 例如有個字串 S 內容為 'A,B,C,D,E;F,G' // _StrSeg(S,",",2); 表以逗點當分隔字元識別,並取出第二段內容->'A,B,C,D,E;F,G' -> 即取出'B' // _StrSeg(S,";",2); 表以分號當分隔字元識別,並取出第二段內容->'A,B,C,D,E;F,G' -> 即取出'F,G' // _StrSeg(S,"D,E",2); 表以'D,E'(多 Byte 字串)當分隔字元識別,並取出第二段內容->'A,B,C,D,E;F,G' -> 即取出';F,G' // ================================================================ String __fastcall _StrSeg(String Str , String SegSymbol , int SegIndex) { String Result=""; if ((Str=="") || (SegIndex<1)) return (Result); String c=SegSymbol; if (c=="") c=","; int i=0; String s=Str; String sTmp; while (s.Pos(c)>0) { i ; sTmp = s.SubString(1,s.Pos(c) - 1); if (SegIndex==i) { Result=sTmp; break; } s = s.SubString(s.Pos(c) c.Length() , s.Length() - (s.Pos(c) c.Length()) 1); } if (SegIndex==i 1) { Result=s; } return (Result); } //--------------------------------------------------------------------------- //依照分隔符號,求區段數 //--------------------------------------------------------------------------- int __fastcall _StrSegCount(String Str , String SegSymbol) { int Result=0; if ((Str=="")) return (Result); String c=SegSymbol; if (c=="") c=","; int i=0; String s=Str; String sTmp; while (s.Pos(c)>0) { i ; sTmp = s.SubString(1,s.Pos(c) - 1); s = s.SubString(s.Pos(c) c.Length() , s.Length() - (s.Pos(c) c.Length()) 1); } Result=i 1; return (Result); } |
coolstar405
一般會員 發表:2 回覆:5 積分:1 註冊:2004-03-22 發送簡訊給我 |
|
coolstar405
一般會員 發表:2 回覆:5 積分:1 註冊:2004-03-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |