switch case 解決字符串選擇的問題

C 的switch只支持整型表達式、以及能夠轉化成整型的表達式。這就是說,switch不支持字符串、數組、浮點數。支持整型,包括short / unsigned short / int / unsigned int/ long / unsigned long 。此外,還有long long和unsigned long (若是編譯器支持long long的話)   。除了整型,若是一個變量或表達式能夠轉化成整型,那麼switch也支持,就是根據這個原則咱們能夠將switch()中的參數轉換成含有字符串的表達式來處理字符串的選擇問題。以下: switch(strcmp(str1,str)==0?(1:strcmp(str2,str)==0?(2:strcmp(str3,str)==0?3:default)))
{
case 1:
    .....................
case 2:
    .......................
case 3:
........................
case 4:
...........................default:   ..........................
} 看了下論壇,有網友說能夠使用hash函數替代的方法,如: switch ( hash( somestring ) )
{
case xxx : // xxx = hash( "your string1" );
...
} 還有網友指出能夠用查表的方法實現,如:TStrings *ss = new TStringList();
ss->Add( "Your string1" );
ss->Add( "Your string2" );

...

switch( ss->IndexOf( somestring ) )
{
0 : // Your string1
1 : // Your string2
...
default : // Invalid
}
delete ss; 上述兩種方法我均沒有測試過,感興趣的朋友能夠搞一下。
相關文章
相關標籤/搜索