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