簡體   English   中英

如何將char值轉換為特定的int值

[英]How can a char value be converted to a specific int value

我有一個作業,我必須制作一個程序,該程序允許一個人輸入七個字母的單詞並將其轉換為電話號碼(例如1-800-PAINTER到1-800-724-6837)。 我正在嘗試將每個字母轉換為要輸出給用戶的特定數字,每個字母對應於電話鍵盤上的數字(因此a,A,b,B或c,C等於1,即更大信息: https : //en.wikipedia.org/wiki/Telephone_keypad )。

目前,我已經進行了設置,以使輸入單詞的每個字母分別代表一個char變量,分別為1、2、3、4、5、6或7。 然后,使用switch和if語句,其想法是將char轉換為xtwo = 2,xthree = 3等的int變量。但是,這不起作用。 有一個更好的方法嗎?

代碼示例(直到第一個開關,盡管大多數情況下都是這樣的重復模式):

int main()
{
    char one, two, three, four, five, six, seven;

    cout << "Enter seven letter word (1-800-***-****): " << "\n";

    cin >> one >> two >> three >> four >> five >> six >> seven;
    int xtwo = 2; int xthree = 3; int xfour = 4; int xfive = 5; int xsix = 6; int xseven = 7; int xeight = 8;
    int xnine = 9;

    switch (one)
    {
    case 1:
        if (one == 'a' || one == 'b' || one == 'c' || one == 'A' || one == 'B' || one == 'C')
        {
            one = xtwo;
        }
        break;
    case 2:
        if (one == 'd' || one == 'e' || one == 'f' || one == 'D' || one == 'E' || one == 'F')
        {
            one = xthree;
        }
        break;
    case 3:
        if (one == 'g' || one == 'h' || one == 'l' || one == 'G' || one == 'H' || one == 'L')
        {
            one = xfour;
        }
        break;
    case 4:
        if (one == 'j' || one == 'k' || one == 'l' || one == 'J' || one == 'K' || one == 'L')
        {
            one = xfive;
        }
        break;
    case 5:
        if (one == 'm' || one == 'n' || one == 'o' || one == 'M' || one == 'N' || one == 'O')
        {
            one = xsix;
        }
        break;
    case 6:
        if (one == 'p' || one == 'q' || one == 'r' || one == 's' || one == 'P' || one == 'Q' || one == 'R' || one == 'S')
        {
            one = xseven;
        }
        break;
    case 7:
        if (one == 't' || one == 'u' || one == 'v' || one == 'T' || one == 'U' || one == 'V')
        {
            one = xeight;
        }
        break;
    case 8:
        if (one == 'w' || one == 'x' || one == 'y' || one == 'z' || one == 'W' || one == 'X' || one == 'Y' || one == 'Z')
        {
            one = xnine;
        }
        break;
    }

因此,從本質上講,如何將字母的char變量轉換為特定的int變量?

您可以使用std::map

例如,您可能有

std::map<char,int> char_to_dig {
  {'a',1}, {'b',1}, {'c',1},
  {'d',2}, {'e',2}, {'f',2}
};

然后

char_to_dig['a']

會給你1


另外,您可以編寫一個執行映射的函數。 與此類似:

int char_to_dig(char c) {
  static const char _c[] = "abcdefghi";
  static const int  _i[] = { 1,1,1,2,2,2,3,3,3 };
  for (unsigned i=0; i<9; ++i) {
    if (_c[i]==c) return _i[i];
  }
  return -1; // some value to signal error
}

或者,也可以不使用數組,而可以對char進行算術運算(因為它們只是小整數)。

int char_to_dig(char c) {
  c = std::toupper(c);
  if (c < 'A' || c > 'Z') return -1;
  if (c == 'Z') return 9;
  if (c > 'R') --c;
  return ((c-'A')/3)+2;
}

這將為您提供類似此墊上的數字:

在此處輸入圖片說明


顯然,有一個類似的代碼黃金問題

自從我編寫任何c / c ++代碼以來已經有好幾年了,我什至沒有安裝可以用..進行測試的編譯器,但這應該使您正確地開始檢查功能和語法...完全是我的頭腦。 需要檢查。 //

int numArray[7];
char inputStr[10]; 
cout << " give me 7 characters";
cin >> input;

/*
use a for loop to read the string letter by letter (a string in c is an 
array of characters)
convert the characters to uppercase 
fall through case statements for each group of letters
assing value to output array to do wiht as you like.
*/


for(i=0; i < 7; i++){
    inputStr[i] = toupper(inputStr[i]);
    switch(input[i]){
      case 'A':
      case 'B':
      case 'C':
        numArray[i] = 2;
        break;
      case 'D':
      case 'E':
      case 'F':
        numArray[i] = 3;
        break;

    and so on and so foth....


      }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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