2017-08-22 104 views
1

我正在編寫一個C++控制檯應用程序,並將a轉換爲1,b轉換爲2等。事情是,它像48和52輸出的數字 - 即使我立足其關閉陣列只上升到26數組輸出不正確 - C++

下面的代碼:

void calculateOutput() { 

    while (input[checkedNum] != alphabet[checkedAlpha]) { 
     checkedAlpha++; 
     if (checkedAlpha > 27) { 
      checkedAlpha = 0; 
     } 
    } 

    if (input[checkedNum] == alphabet[checkedAlpha]) { 
     cout << numbers[checkedAlpha] << "-"; 
     checkedAlpha = 0; 
     checkedNum++; 
     calculateOutput(); 
    } 
} 

這是我的數字和字母排列:

char alphabet [27] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s','t','u','v','w','x','y','z',' '}; 

int numbers [27] = { '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','0' }; 
+2

如何定義「輸入」,「字母」和「數字」? – CinCout

+2

提示:'inputAlphabet - 'a'+ 1'會給你所需要的 – CinCout

+0

'numbers'數組來自哪裏?無論如何,你的輸出(像48等等)聽起來像[ASCII值](https://www.programiz.com/cpp-programming/examples/ASCII-value-character)。 – nondestructive

回答

3

及其int陣列所以它意味着它將保存的字符的ASCII值。

,如果您仔細看的ASCII table,你會發現,48,49,50,......是數字0,1,2的ASCII值,...

你要做的是什麼扣除在表第一數目的值 - > '0'(48)

cout << numbers[checkedAlpha] - '0' << "-"; 

或更好,數字儲存爲號碼不是字符

int numbers [27] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14​,15,16,17,18'​,19,20,21,22,23,24,25,26​,0 }; 

順便說一句。這裏是讓你更容易的提示

tolower(inputAlphabet[index]) - 'a' + 1 // For 'a' output is 1 and so on :-) 
+1

呃感謝,那工作:) – plezhelpmeh

+0

我很高興它幫助你,記住ascii表。 :-) –

0

獲得字母表中字母數字(i9ndex)的算法非常簡單。不需要表格,簡單的減法就可以實現。

int getLetterIndex(char c) 
{ 
    // returns -1 if c is not a letter 
    if ('a' <= c && c <= 'z') 
     return 1 + c - 'a'; 
    if ('A' <= c && c <= 'Z') 
     return 1 + c - 'A'; 
    return -1; 
}