全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2279
推到 Plurk!
推到 Facebook!

字串拆解問題

 
coolstar405
一般會員


發表:2
回覆:5
積分:1
註冊:2004-03-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-27 22:16:39 IP:203.67.xxx.xxx 未訂閱
#include  #include int main(void) { int i; char input[16] = "abc,d,,e"; char *p= "abc,d,,e"; p = strtok(input, ","); if (p) printf("%s\n", p); for(i=0;i<4;i ) { p = strtok(NULL, ","); if (p) printf("%s\n", p); } return 0; } 這個程式中,d跟e中間有兩個相連的逗號程式執行時(應該說只當成一個逗號),會被跳過而直接檢驗e,如果兩個逗號相隔一格以上則可以當成空字串,我想要相連的逗號之間也能當成空字串,不知道該怎麼做
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-27 22:51:14 IP:163.29.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-27 23:16:33 IP:203.67.xxx.xxx 未訂閱
[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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-28 20:46:06 IP:163.29.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-28 22:20:11 IP:203.67.xxx.xxx 未訂閱
g6101你好:    真是太感謝你了,還加了好多註解,雖然有些函式不甚了解, 但我一定會想辦法弄好的,多謝指導  
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-29 14:12:02 IP:140.135.xxx.xxx 未訂閱
coolstar405您好: PO程式碼的方式請參考版規說明 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46593 煩請修改,謝謝您的配合< > 順心< >
coolstar405
一般會員


發表:2
回覆:5
積分:1
註冊:2004-03-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-29 15:48:47 IP:203.67.xxx.xxx 未訂閱
版主你好啊 我已經把程式碼修改成放在code與\code之間了 可是程式碼好像沒變化,不知道我這樣做對嗎?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-29 16:52:55 IP:140.135.xxx.xxx 未訂閱
您好:
引言:可是程式碼好像沒變化,不知道我這樣做對嗎
請看您的第一篇問題與您第一個回應的差異,程式碼看起來是不是清楚多了 > 結案方式: < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22190">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22190 發表人 - taishyang 於 2004/03/29 21:16:23
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-29 17:33:48 IP:211.21.xxx.xxx 未訂閱
// ================================================================
// 函數名稱:_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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-29 21:02:24 IP:211.74.xxx.xxx 未訂閱
g6101你好:    多謝你的指導,我已經把問題解決了   呼呼~程式這東西有時還真不容易,不過蠻好玩的 ^^
coolstar405
一般會員


發表:2
回覆:5
積分:1
註冊:2004-03-22

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-29 21:07:35 IP:211.74.xxx.xxx 未訂閱
bruce0211 版主你好: 也謝謝你提供的方法,我會好好研究的
系統時間:2024-05-18 19:48:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!