2013-02-03 125 views
0

因此,我嘗試使用atoi函數將字符串轉換爲int,但是我得到一個錯誤,指出參數類型char與類型爲const char *的參數不兼容。這裏是代碼:使用atoi在字符串到int轉換中的錯誤

void evaluate(const char values[], string& codeMessage, string& result) 
{ 
    unsigned int i = 0; 
    while (i<codeMessage.length()) 
    { 
     result+= values[atoi(codeMessage[i])]; 
     i++; 
    } 
} 

所以,如果函數evaluate({a,b,c,d}, "2331", result)被調用時,結果必須包含"cdda"。任何想法,我的代碼有什麼問題? thx

+1

'atoi'需要一個字符串,而不是一個字符。 –

+3

使用文檔找出如何使用庫函數的錯誤 –

回答

3

atoi需要一個C字符串,而不是單個字符。

如果要將一個數字詞法轉換爲等效整數,爲什麼不簡單地斷言它在'0''9'之間,然後減去'0'?無論語言環境的字符集如何,數字都必須是連續的。

while (i < codeMessage.length()) { 
    if (codeMessage[i] >= '0' && codeMessage[i] <= '9') { 
     result += values[codeMessage[i] - '0']; 
    } 

    i++; 
} 
+0

「codeMessage [i] - '0'」是什麼意思?用字符0減去一個字符? – user1988385

+0

@ user1988385,如果字符是「4」,則在編碼中它將比「0」中的4個點更高。因此,減去'0'將得到4. – chris

+0

這是從字符'codeMessage [i]'中減去的字符'0'。 [減法](http://en.wikipedia.org/wiki/Subtraction)是當你從另一個號碼中取出一個號碼時,例如5-3 = 2。 'char's只是下面的數字,我們可以對這些基礎值進行算術運算。 –