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

switch 應用問題

尚未結案
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-20 18:46:12 IP:220.130.xxx.xxx 未訂閱
請問各位大大 小弟想使用switch case 但卻發生參數不可是AnsiString 必須是integral 我目前是想瘋狂用if else if來做 不知道有沒有更好辦法 謝謝

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-20 19:44:50 IP:163.23.xxx.xxx 未訂閱
Ming Lin 您好:    switch 是沿用自 c 而來 自然不支援 AnsiString    但可以改成以 char 字元來做 ~    swicth(varible name) { case 'A': do something ; break ; case 'B': do something ; break ; ... ... }    至於是不是支持到多個字元(abc),小弟也還沒寫過 ~ < > 請版上的前輩做補充好了 < >
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-21 08:28:12 IP:220.130.xxx.xxx 未訂閱
我是有加.c_str()試過 結論也是不行 其實一個字還好判斷 我想用ASCII來判斷應該就行 但2字以上ㄋ 請大大教我ㄅ 
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-21 09:47:14 IP:147.8.xxx.xxx 未訂閱
switch (PosEx(LowerCase((str.c_str())),"aa|bb|cc",0)) {
    case 1: ShowMessage("aa"); break;
    case 4: ShowMessage("bb"); break;
    case 7: ShowMessage("cc"); break;
}
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-21 14:01:10 IP:220.130.xxx.xxx 未訂閱
william大大 不好意思 小弟資質駑鈍 看無 PoxEx 是啥ㄋ 查help也沒看到 ⊙_⊙
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-21 14:16:49 IP:147.8.xxx.xxx 未訂閱
引言:extern PACKAGE int __fastcall PosEx(const AnsiString SubStr, const AnsiString S, unsigned Offset = 1); Description PosEx returns the index of SubStr in S, beginning the search at Offset. If Offset is 1 (default), PosEx is equivalent to Pos. PosEx returns 0 if SubStr is not found, if Offset is greater than the length of S, or if Offset is less than 1.
BTW, you should select some separator (| in the example) which never occur in the string. Or you can use TStringList together with its IndexOf function.
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-21 14:54:30 IP:61.230.xxx.xxx 未訂閱
引言: 請問各位大大 小弟想使用switch case 但卻發生參數不可是AnsiString 必須是integral 我目前是想瘋狂用if else if來做 不知道有沒有更好辦法 謝謝
你好: 如果先建立字庫經過while loop索引,就可以利用索引值再做switch, 雖然這 樣道理跟if~else~一樣,(有點像來鬧的),但寫起來比較好看,也不會一堆
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-21 15:25:46 IP:220.130.xxx.xxx 未訂閱
william大大 謝謝你啦 看PosEx敘述應該是和Pos差不多 但比它好用 但我怎不能用ㄋ help也查不到 怪怪 ?? 我的環境為BCB6 Enterprise Suite [Build 10.157]    JerryKuo大大 好主意 的確看起來比較乾淨 也謝謝你     
shinnuei
一般會員


發表:32
回覆:48
積分:21
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-21 16:03:21 IP:61.221.xxx.xxx 未訂閱
我想 JerryKuo 講的應該是這個意思:
    int i;
    String Key;
    char *CommandArray[] = { "stat1","stat2","stat3","stat4","stat5",NULL };
    i = 0;
    Key = InputBox("Please Input Your Key", "0");
    do
    {
        if ( !strcmp(Key.c_str(), CommandArray[i]) )
            break;
        i  ;
    } while ( CommandArray[i] != NULL );      switch(i)
  {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
  }
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-21 16:57:43 IP:61.230.xxx.xxx 未訂閱
引言:
    int i;
    String Key;
    char *CommandArray[] = {
                            "stat1",
                            "stat2",
                            "stat3",
                            "stat4",
                            "stat5",
                             NULL 
                           };
    i = 0;
    Key = InputBox("Please Input Your Key", "0");
    do
    {
        if ( !strcmp(Key.c_str(), CommandArray[i]) )
            break;
        i  ;
    } while ( CommandArray[i] != NULL );      switch(i)
  {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
  }
你好: 沒錯,謝謝
Ming Lin
一般會員


發表:27
回覆:53
積分:21
註冊:2003-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-10-21 17:09:26 IP:220.130.xxx.xxx 未訂閱
嗯 很可惜william大大的函式 應該會很好用 但我實在無法使用 我太弱ㄌ > 對 >
系統時間:2024-06-27 3:11:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!