2017-04-25 8 views
1

数値をchar型に代入して算術演算を実行していますか?たとえば、

char X = 3; 
char Y = 6; 
char Z = 9; 
int scoreAll, score1, score2, score3; 

cin >> score1 >> score2 >> score3; // user should enter X >> Y >> Z 

scoreAll = score1 + score2 + score3; 

cout << scoreAll // output should be 18 

チャータイプにINT番号を割り当て、その後、別の変数を使用して、その上に演算を実行するためのC++の方法はありますか?

基本的に私は、char型のXを入力して、私は3


補足説明型付けされたように、コンパイラの行為を作りたい: ユーザーは、いくつかの文字を入力し、「XYXXZ」は、例えば、各文字をコンパイラはこれらの文字の値を追加し、結果を整数のみとして出力する必要があります( "XYXXZ"の結果は24でなければなりません)。

+1

もしswitch.intを使用することができGETVAL(チャーX) {\tスイッチ(X) \t {\t \t場合 'X': \t \t \tリターン3。 \t \tケース 'Y': \t \t \t return 6; \t \tケース 'z': \t \t \tリターン9; \t} \t return -1; //無効な入力 } – user1438832

+3

ユーザーに文字または文字列を入力させ、それを変数の名前を参照するように使用する方法はありません。あなたはそれを自分で行う必要があります。ソースコード内の名前とプログラム内の値は、別々のユニバースです。 – molbdnilo

+2

あなたの質問は泥と同じくらい明確です。あなたが意味するものの概念的な例を提供してください。 – Peter

答えて

2

あなたが値にあなたの文字/変数名をマップするためにstd::mapを使用することができます。何がしたいことは、ユーザが入力したAAの数値から変換するのですが、charとして読んでいたので、

std::map<char,int> values; 
value['X'] = 3; 
value['Y'] = 6; 
value['Z'] = 9; 
char score1, score2, score3; 

//Here it would be advisable to check cin status/success 
cin >> score1 >> score2 >> score3; 

cout << value[score1] + value[score2] + value[score3] << std::endl; 

checking cin status

+0

はい、うまくいくでしょう。ステータス/成功のために 'cin'をチェックすることを忘れないでください。 –

+0

@BoundaryImpositionありがとうございました!私はdownvoteについて不思議です! – Antonio

+0

@Antonioあなたがそれをしたので、downvotesについて心配しないでください、多くの感謝: – BeyondNero

-3

試してみてください。

int main() 
{ 

    char X = 3; 
    char Y = 6; 
    char Z = 9; 

    int scoreAll; 
    cin >> X >> Y >> Z; 
    scoreAll = X + Y + Z; 
    cout << scoreAll; 
    return 0; 
} 

別の方法:

int main() 
{ 
    char X; 
    cin >> X; 
    printf("%d",X - 85); 
    return 0; 
} 
-1

のためのいくつかのアイデアを:ユーザが文字のX、YおよびZに、その後挿入することができます最も簡単な方法は、それをintに変換することです。

int main() 
{ 
    char x, y, z; 
    std::cin >> x >> y >> z; 
    int result = atoi(x) + atoi(y) + atoi(z); 
} 

税引後営業利益も、彼らは、同じように見えるthougth、数に数値文字から変換されます「1」1

+0

それは彼らが望むものではありません(質問は非常に不十分に記載されていますが)。彼らは、ユーザー主導型の「変数変数」が必要です。 –

0

ではありません、それはあなたに正直にそれを

を行うには恐ろしい方法ですすべて使って解決した後

#include <map> 
#include <stdio.h> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::map<std::string, int> map; 
    map["X"] = 3; 
    map["Y"] = 6; 
    map["Z"] = 9; 

    std::string res = ""; 
    std::cin >> res; 

    for (std::map<std::string, int>::iterator it = map.begin(); it != map.end(); ++it) 
    { 
    if (it->first == res) 
    std::cout << it->second << std::endl; 
    } 
} 

をマップのようなC++のコンテナを使用する必要があります(ただし、他のものを使用する必要があります)あなたは

ような何かを行うことができます
#include <string> 
#include <iostream> 
#include <stdio.h> 

#define PRINTER(name) printer(#name, (name)) 

std::string printer(char *name, int value) { 
    std::string res (name); 
    return res; 
} 

int main() 
{ 
    char X = 3; 
    char Y = 6; 
    char Z = 9; 

    std::string res = ""; 
    std::cin >> res; 

    if (res == PRINTER(X)) 
    std::cout << (int)X << std::endl; 
} 
+0

最近のC++では動作しません。 'const char * name'を使用してください –

+0

+ C++標準でstd :: stringを使うことをお勧めします。 – RomMer

+0

いいえ、動作しません。 C++ 98とC++ 03では、文字列リテラルから 'char *'への変換は廃止されました。 C++ 11以降は_illegal_です。さらに、C++標準では、あなたが主張するように、このような場合にstd :: stringを使用することを推奨していません。 –

関連する問題