2016-03-12 21 views

回答

1

你可以使用一個簡單的字符數組:

static const char symbols[] = {'@', '#', '^', '*'}; 
char c; 
std::cin >> c; 
unsigned int value; 
for (value = 0; value < sizeof(symbols); ++value) 
{ 
    if (c == symbols[value]) 
    { 
    break; 
    } 
} 
if (value >= sizeof(symbols)) 
{ 
    // Symbol not found. 
} 
else 
{ 
    value += 2; 
} 

上面的代碼搜索符號字符數組。如果符號存在,則索引是與該符號關聯的值。但是,由於@符號是第一個,並且數組索引從0開始,所以在找到該值後,通過將數組索引加2來進行調整。

編輯1:查找表
另一種方法是使用查找表。創建一個包含關係的結構,然後創建這些結構的數組。

struct Relationship 
{ 
    char c; 
    unsigned int value; 
}; 

Relationship table[] = 
{ 
    {'@', 2}, {'#', 3}, {'^', 4}, {'*', 5}, 
}; 
const unsigned int TABLE_SIZE = 
    sizeof(table)/sizeof(table[0]); 

char c; 
cin >> c; 
unsigned int value = 0; 
for (unsigned int i = 0; i < TABLE_SIZE; ++i) 
{ 
    if (table[i].c == c) 
    { 
     value = table[i].value; 
     break; 
    } 
} 

編輯2:使用switch
的另一種方法是使用switch語句:

char c = '\0'; 
cin >> c; 
unsigned int value; 
switch (c) 
{ 
    case '@': value = 2; break; 
    case '#': value = 3; break; 
    case '^': value = 4; break; 
    case '*': value = 5; break; 
    default: value = 0; break; 
} 

的如果/其他梯:
編輯3:程序:

#include <iostream> 

using std::cin; 
using std::cout; 


int main(void) 
{ 
    cout << "Enter symbol: "; 
    char c; 
    cin >> c; 
    unsigned int value = 0U; 
    if (c == '@') 
    { 
     value = 2; 
    } 
    else if (c == '#') 
    { 
     value = 3; 
    } 
    else if (c == '^') 
    { 
     value = 4; 
    } 
    else if (c == '*') 
    { 
     value = 5; 
    } 
    else 
    { 
     value = 0; 
    } 

    cout << "\nYour value: " << value; 
    return 0; 
} 

採樣運行:

C:\Debug>symbol_matching.exe 
Enter symbol: @ 

Your value: 2 
C:\Debug>symbol_matching.exe 
Enter symbol: * 

Your value: 5 
C:\Debug>symbol_matching.exe 
Enter symbol:^

Your value: 4 
C:\Debug>symbol_matching.exe 
Enter symbol: # 

Your value: 3 

注:我輸入特殊符號,接着按回車。

+0

我試過使用「if/else ladder」。當輸入特殊字符時,我得到一個00作爲回報。 ei:cin​​ >> c; cout <<「你輸入」<< c << value << endl ;.回報是:你輸入00.我做錯了什麼? – John

+0

用**編輯3 **查看我的更改。我不知道你在哪裏發表你的言論。 –

5

A std::map<char, int>可能會做你所需要的。

+0

Upvoted提供了極好的猜測,即當他說「分配」時,OP可能意味着「映射」。 –

+1

雖然 –

+0

對於一個新學生來說IT技術將是壓倒性的,不僅是壓倒性的,而且也是效率低下的。 – ZDF

相關問題