2016-07-12 25 views
2

このwebsiteでは、文字列でswitch文を作成する興味深い方法が見つかりました。しかし、これは本当に長くて引き出されているようです。特定の文字列をswitch文で使用できる整数に変換することが可能かどうかを知りたかったのです。(C++/QT)文字列をintに変換してswitch文を使用する

ので、擬似コードは、この

QString str = "spinbox_1"; 

switch stoi(str) 
case 1543: 
    //code here 
case 2343: 
    //code here 
case 3424: 
    //code here 
+0

文字列からintを作成してswitch文で使用しましたか? – juanchopanza

+0

なぜこのようなことをしたいですか?リンクされた解決策ははるかに優れているようです。 – Arunmu

答えて

1

同様の状況で自分自身を見つけた場合は、マップを使用して、指定された文字列から特定のintを定義します。例については

// The string you want to convert to an int 
std::string myString = "stringTwo"; 

// The mapping that you set for string to int conversions 
std::map<std::string, int> stringToInt = \ 
    {{"stringOne" , 1}, 
    {"stringTwo" , 2}, 
    {"stringThree", 3}}; 

// Here, myInt is define as 2 
int myInt = stringToInt[myString]; 

今、あなたはスイッチケースにmyIntを入れることができます。

+0

std :: string – nosbor

+1

これは、著者が提供するリンク上で実装されている方法と、彼が避けたいものです。 – Slava

+1

@Slavaそう、同じです。 – nosbor

0

ようなものになるだろういいえ、一般的に一意の整数に文字列をマッピングすることはできません - 整数よりも、単純に複数の文字列があります。あなたは2つの異なる文字列について衝突する可能性のないハッシュを計算して比較することができますが、2つの異なる文字列が同じハッシュを持つ可能性はありますので、ハッシュをチェックした後にその文字列を比較する必要があります。これは、std::unordered_setまたはstd::unordered_mapが実装されている(hash_setおよびhash_mapとも呼ばれます)ので、使用することができます。しかし、switch()の文は使用しません。

+1

オペレータは、 'swich'を' case'esとともに使用する意図は、コンパイル時および有限で可能な文字列の集合が分かっていることを意味します。そのようなセットの場合、そのセットから整数を一意的にマップする関数を構築することは可能です – mvidelgauz

+0

いいえ、そのような関数があれば、その結果に 'switch'を使用してください。 – Slava

2

@Slavaが述べたように、それは容易には不可能です。前述のリンクで著者が提供した解決策はおそらく最も実用的な解決策です。しかし何らかの理由で実際に別の方法で文字列を10進数に変換する必要がある場合は、ハッシュメトロッドを使用できます。広く使われているcityhashを参照してください(明らかに他のハッシュ関数を使うことができます)。 https://github.com/google/cityhash

これは、の重複ことがあります How can I hash a string to an int using c++?

+0

ありがとう、私はこれもショットを与えるでしょう。私の状況ではハッシュが働くかもしれません。 – tisaconundrum

2

この解決策を見て試してみてください。 https://github.com/Efrit/str_switch/blob/master/str_switch.h

残念ながら、この解決策の説明はロシア語でavaliableである(少なくとも、私は見つけることができません1つは英語で)。これは、コンパイル時に文字列のハッシュを計算することに基づいています。それが持つ唯一の制限は、9文字の最大長の文字列をサポートすることです。

+0

これはかなり天才です、ありがとう – tisaconundrum

関連する問題