2010-06-22 39 views
3

如何將字符轉換爲整數值?例如,我一直試圖將「A」看作1,將「​​B」看作2,等等。我嘗試將字符與字母表中的每個字母進行比較並返回相應的值。如何從字符中檢索整數值?

int intvalue(char letter) 
{ 
if(letter == "A") 
    return 1; 
else if(letter == "B") 
    return 2; 
else if(letter == "C") 
    return 3; 
else if(letter == "D") 
    return 4; 
else if(letter == "E") 
    return 5; 
else if(letter == "F") 
    return 6; 
else if(letter == "G") 
    return 7; 
else if(letter == "H") 
    return 8; 
else if(letter == "I") 
    return 9; 
else if(letter == "J") 
    return 10; 
else if(letter == "K") 
    return 11; 
else if(letter == "L") 
    return 12; 
else if(letter == "M") 
    return 13; 
else if(letter == "N") 
    return 14; 
else if(letter == "O") 
    return 15; 
else if(letter == "P") 
    return 16; 
else if(letter == "Q") 
    return 17; 
else if(letter == "R") 
    return 18; 
else if(letter == "S") 
    return 19; 
else if(letter == "T") 
    return 20; 
else if(letter == "U") 
    return 21; 
else if(letter == "V") 
    return 22; 
else if(letter == "W") 
    return 23; 
else if(letter == "X") 
    return 24; 
else if(letter == "Y") 
    return 25; 
else if(letter == "Z") 
    return 26; 

}

我 「錯誤:ISO C++禁止指針和整數之間的比較」。有誰知道如何解決這一問題?或者甚至更好,以不同的方式去解決這個問題?我覺得我的上述功能非常強悍。

回答

9

您需要使用字符文字,而不是字符串文字,例如,

if (letter == 'A') 
      ^note the single quotes 

這就是說,如果你願意假設你正在使用的ASCII字符集的系統上運行,你可以簡單地使用算術:

int charIndex = (letter - 'A') + 1; 

在ASCII字符集中,字母是連續的索引,所以這是有效的。這可能不適用於其他字符集。

+1

我覺得在這個時代,如果任何人都可以對環境做出任何假設,它依賴於ASC II。我們避免做的每一個假設都會增加系統的複雜性,所以在某些時候我們必須找到平衡點,我們必須找到一個堅實的共同起點。 – wilhelmtell 2010-06-22 03:00:47

1

試試這個:

return letter - 'A' + 1; 

(雖然你可能要處理一個徹頭徹尾的範圍letter輸入)

注意char是單個字符,它使用單引號:'A'。字符串是多個字符並使用雙引號:"ABC"

您可以將字符視爲整數(它們的ASCII值)並對其進行處理。

1

字符和它們的ASCII值整數是可以互換的。字符的ASCII值減去'A'小號ASCII值是0,因此添加1會給你1:

return letter - 'A' + 1; 

從技術上講,你也可以只減去'@'(表中的「A」之前的字符),但我認爲它可能不太清楚。你的問題是你使用"A"而不是'A';前者是一個字符串(技術上一個指針指向一個字符),而後者是一個單獨的字符

+0

'信 - 'A'+ 1'!='字母''B''。畢竟,加法和減法具有相同的優先級。 – 2010-06-22 02:53:49

+0

@Ben我有一種錯覺,我只是在做我的腦子裏的數學。固定 – 2010-06-22 02:54:52

4

在C++中,一個char一個數字。所以不需要像上面那樣的精心製作的方法:你可以直接使用char。如果你想使之與A = 1基於如上圖所示,那麼你可以做:

int intValue(char value) 
{ 
    return (value - 'A') + 1; 
} 

至於你要在C/C++的錯誤,雙引號字符爲char*(或者更準確地說,char[],但這裏的區別並不重要)。這就是爲什麼你會收到一個錯誤:你試圖比較charchar*

1

一個更通用的實現涉及搜索字符數組,並使用該指數作爲你的價值:

int Value_From_Char(char c) 
{ 
    static const char valid_letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    const std::string letter_str(valid_letters); 

    // Search the letters for the given char. 
    std::string::size_type position = 0; 
    position = letter_str.find(c); 
    int result = 0; 
    if (position == std::string::npos) 
    { 
    result = -1; 
    } 
    else 
    { 
    result = (int) position; 
    } 
    return result; 
} 

此功能將與UTF格式正常工作。這種方法不會對整理順序做任何假設。

0

一種可能的方法是在運用從char一個顯式的int

#include <iostream> 

int main() 
{ 
    char c; 
    std::cout << "Enter a character: "; 
    std::cin >> c; // for more than one chars you may need to use getline() or ignore() 

    std::cout << "ASCII value of: " << c << ", is: " << int(c) <<".\n"; 
} 

輸入:

p

輸出:

ASCII value of: p, is: 112.