[英]create and initialize a static const char array as Ascii Look up Table in c++
嘿,我試圖做一個查詢表來將字符轉換為大寫:
struct X {
static const char lut[256];
};
int main(int argc, char** argv) {
for(int i = 0; i < 256; i++) {
char c = (char)i;
if (c <= 'z' && c > 'Z') {
X::lut[i]= (c-32);
}
X::lut[i]=c;
}
return 0;
}
我知道這是錯誤的方法:(有人可以告訴我做正確的事嗎?
當您將問題標記為C ++時,代碼似乎更符合C。如果您使用的是C ++,則Jarod42使用std :: toupper的注釋是一個很好的建議。
如果您嘗試將其用作C,那么我認為您的if語句不正確。 考慮一下c只是比'Z'大1的情況,后者將是'['字符。 在這種情況下,您要減去32,這可能不是您想要的。 我會更改if是否只做小寫字符的范圍。
另外,即使運行了if,if塊之后的下一條語句也會將字符設置回c,因此您需要添加else語句和塊,或者在進行比較以更改外觀之前進行賦值桌子。
您的條件看起來有點怪異-“ Z”和“ a”之間還有其他幾個字符-當條件為真時,您將立即覆蓋表條目。 您將需要一個else
來處理不應翻譯的字符。
if ('a' <= c && c <= 'z') {
X::lut[i] = c - 32;
}
else {
X::lut[i] = c;
}
您可以使用以下內容(在C ++ 11中):
#include <array>
#include <cctype>
std::array<char, 256> to_upper_array()
{
std::array<char, 256> res;
for (int i = 0; i != 256; ++i) {
res[i] = char(std::toupper(i));
}
return res;
}
struct X {
static const std::array<char, 256> lut;
};
const std::array<char, 256> X::lut = to_upper_array();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.