2014-05-11 72 views
-3

我寫一個詞法分析器和我使用一個數組來strore的關鍵字和保留字:我想使用C++陣列和發現功能

string keywords[20] = { 

    "function", 
    "if", 
    "while", 
    "halt", 
}; 

bool isKeyword(string s) 
{ 
    return find(keywords.begin(), keywords.end(), s) != keywords.end(); 
} 

但我獲取錯誤:「錯誤:'關鍵字'中的成員'end'的請求,它是非類類型的'std :: string [20] {aka std :: basic_string [20]}」

+3

:獲取結束迭代使用。 –

回答

1

Plain array沒有辦法,所以你不能撥打begin()end()。但是你可以使用相同的名稱的非成員函數:

#include <alorithm> // for std::find 
#include <iterator> // for std::begin, std::end 

bool isKeyword(string s) 
{ 
    std::find(std::begin(keywords), std::end(keywords), s) != std::end(keywords); 
} 

如果你沒有C++ 11的支持,您可以輕鬆地自己推出這些功能了,或者使用數組的大小試圖使編譯器(我想這就是爲什麼你寫一個詞法分析器),你至少應該熟悉一下你的語言的**非常基本的概念**之前

return std::find(keywords, keywords + 20, s) != keywords + 20; 
+0

事實上,我沒有C++ 11 suppost和.end,我得到的錯誤是:'關鍵字'中的成員'end'的請求,它是非類類型的'std :: string [20] {又名std :: basic_string [20]}' – user3599420

+0

@ user3599420第二種解決方案應該可以在沒有C++ 11的情況下工作。這個答案的第一行解釋了你得到的錯誤。 – juanchopanza

+0

第一行是說我不能使用存在並以數組結束,那麼如何在最後一行使用.end?你能否請進一步解釋和謝謝你的時間 – user3599420