2012-05-07 98 views
2

可能重複:
best way to switch on a string in CC字符串

什麼是正在使用的字符串(C字符數組)的一般方法與switch語句一起?我正在查詢我的數據庫存儲的貨幣爲

"USD" 
"EUR" 
"GBP" 

等等。從PHP的背景來看,我只會這樣做:

switch ($string) { 
    case "USD": 
    return "$"; 
    break; 
    case "EUR": 
    return "€"; 
    break; 
    case "GBP": 
    return "£"; 
    break; 
    default: 
    return "$"; 
} 

在C中,case-value必須是整數。我會如何去執行類似於C的東西?我最終會在一個巨大的if/else塊中寫入很多strcmp嗎?還請注意,我不能簡單地比較貨幣的第一個字符,因爲有些字符(不是在這個例子中)是以相同的字符開始的。

+0

感謝科迪,即使我在發佈我的問題之前做過搜索,還沒有看過這個。 –

+1

另請參閱http://stackoverflow.com/questions/4165131/cc-switch-for-non-integers – peoro

回答

4

一種方法是定義C字符串數組,並把它作爲您的訂購的定義:

const char *currencies[] = {"USD", "GBP", "EUR"}; 

現在您可以搜索currencies爲您的字符串,並在交換機使用其指數聲明。

你可以幻想和 - 你的字符串進行排序,並使用bsearch找到O(LogN)

+1

C標準庫附帶一個'bsearch()'函數,可用於查找字符串的目的通過傳遞strcmp作爲比較器的有序數組。 – pmdj

+0

我認爲這種方法是最好的,因爲它感覺「乾淨」。我在這裏發佈了一個解決方案:http://pastebin.com/21jpeLkh –

+0

我會很高興,如果你可以看看,並告訴我,如果這是你的想法。再次感謝! –

1

正確的答案指數在許多語言是關聯容器某種;例如,C++中的std::map。在Glib中有一個關聯數組的C實現:請參閱here.還有其他庫有它們自己的。

+3

雖然沒有在C. – Tibor

+0

@Tibor:正如我所說的,Glib有一個C的實現,但也許我應該澄清。 –

1

我會建議使用一個if語句爲這種情況與strcmp函數。

+1

這是正確的答案 –