2016-07-28 5 views
-1

私はとてもうまく動作し、テンプレートにすることを決めた非常に単純なスタックを作った、それはうまくいきましたが、入力に何かが起こったときに整数になったとき特定のテンプレートのデータ型の条件を作成する方法

string m; 
    getline(cin, m); 
    linkedliststack<int> str; 
    for (int i = 0; i < m.length(); i++) 
    { 
     str.push(m[i]); 
    } 

この入力方法を使用すると、m [i]がcharになり、つまりASCIIコードに変換されるように見えます。したがって、1を入力すると48、2が49などになります。 もちろんこれ。

str.push(m[i]-48) 

しかし、それを自動化する方法はありますか。条件付きであれ何でもあれば? 「はい」の場合、必要な構文は何ですか?

ありがとうございました。

+0

キャストできませんか? str.push((int)(m [i])) –

+0

文字列を数値に解析するためにデータ型変換を探しているわけではありません。 – SirGuy

+1

おそらく、stoiリファレンスを使用して調べます。http://www.cplusplus.com/reference/string/stoi/ –

答えて

0

ストリング一backは、charかかり

void push_back (char c); 

すなわちあります。値をcharにしたい場合は、たとえばを使用して値を変換する必要があります。 itoaなど。

0

この問題をこれに関連して繰り返すことをお詫び申し上げます。How do I get the type of a variable? 申し訳ありません、これは私の最初の質問です。

だから私は

string type(){ return typeid(head->value).name(); } 

クラスに新しい関数を作り、新しい条件が問題を解決し、これを解決するために。

​​3210
0

C++ 14を使用できる場合は、そこにenable_ifソリューションがある可能性があります。 おそらくSFINAEソリューションです。しかし、私はそれほど経験はありません。

私は次に何をやっていることは、暗黙的にint型str.push(m[i]);

に文字(m[i])に変換されますが、そのオーバーロードされたテンプレートの方法を提供することができ、あなたのプッシュ方式が

void push(typename T);

として宣言されていると仮定していますcharの入力を処理し、それをあなたのtypenameに正しく変換できます。このような

何か:

void push(const char input) 
{ 
    push(atoi(input)); 
    // push(input-48); 
} 

エラーの多くが持っていることを考慮すべきかの:atoi関数()は整数に文字を変換することができない場合はどうなります ? -48の場合、入力が非数字の文字であれば、スタック上で意図しない数字を押します。 テンプレートがインスタンス化されていないとどうなりますか?

関連する問題