簡體   English   中英

在c ++中創建並初始化一個靜態const char數組作為Ascii查找表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM