[英]How to retrieve an enum index value based on char array? in C++ (cpp)
免責聲明:編程新手,即時學習。 這是我的第一篇文章,如果問題沒有寫清楚,我深表歉意。
我正在嘗試通過有關構建國際象棋引擎的教程來 go,但它是用 C 編寫的,我正在嘗試將其轉換為 C++ 代碼。 代碼的想法是輸入一個字符並檢索枚舉的索引值。 由於此代碼,我收到編譯錯誤。 我該如何解決這個問題,因為在嘗試不同的想法后我不清楚。
例如std::cout << CHAR_TO_PIECE['k'];
預期 output 為 11。
在"typedefs.h"
中
enum Piece {P, N, B, R, Q, K, p, n, b, r, q, k};
在"board.h"
中
extern const int CHAR_TO_PIECE[];
並在board.c
// convert ASCII character pieces to encoded constants
int CHAR_TO_PIECE[] = {
['P'] = P,
['N'] = N,
['B'] = B,
['R'] = R,
['Q'] = Q,
['K'] = K,
['p'] = p,
['n'] = n,
['b'] = b,
['r'] = r,
['q'] = q,
['k'] = k
};
處理此問題的更多 C++ 方法是使用std::map
(或std::unordered_map
),例如:
#include <map>
enum Piece {P, N, B, R, Q, K, p, n, b, r, q, k};
extern const std::map<char, Piece> CHAR_TO_PIECE;
// convert ASCII character pieces to encoded constants
const std::map<char, Piece> CHAR_TO_PIECE = {
{'P', P},
{'N', N},
{'B', B},
{'R', R},
{'Q', Q},
{'K', K},
{'p', p},
{'n', n},
{'b', b},
{'r', r},
{'q', q},
{'k', k}
};
std::cout << (int) CHAR_TO_PIECE['k'];
您可以編寫一個 function 來為您的字符輸入返回特定的枚舉。
enum Piece {P, N, B, R, Q, K, p, n, b, r, q, k};
Piece charToPiece(char ch)
{
switch (ch) {
case 'P':
return P;
case 'N':
return N;
case 'B':
return B;
case 'R':
return R;
case 'Q':
return Q;
case 'K':
return K;
case 'p':
return p;
case 'n':
return n;
case 'b':
return b;
case 'r':
return r;
case 'q':
return q;
case 'k':
return k;
}
}
您可以創建一個包含 2 x 26 個條目(大寫和小寫)的枚舉數組,並為每個相關條目分配正確的枚舉。 這必須手動編碼。 有了這樣的對應表,字符查找是立即的。 (如果需要,您還可以保留“未分配”值。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.