2011-09-06 6 views
0

可能性の重複:
How to convert a single char into an intC++でのIntへのchar?

まあ、私は基本的なプログラムをやっている、ウィッヒは次のようにいくつかの入力を処理しますので、

2 + 2

、I 2 + 2を追加する必要があります。

私はsomethiをしましたngのように:

しかし、今では "fir"を "sec"に追加したいので、それらをIntに変換する必要があります。 私は "int(fir)"を試みましたが、うまくいきませんでした。

答えて

5

文字列をintに変換する方法はたくさんあります。

解決策1:使用してレガシーC機能

int main() 
{ 
    //char hello[5];  
    //hello = "12345"; --->This wont compile 

    char hello[] = "12345"; 

    Printf("My number is: %d", atoi(hello)); 

    return 0; 
} 

解決策2:使用lexical_cast(最も適切&最も単純な)

int x = boost::lexical_cast<int>("12345"); 

ソルン3:何をしようとしましたがうまくいかなかった理由についてC++ Streams

std::string hello("123"); 
std::stringstream str(hello); 
int x; 
str >> x; 
if (!str) 
{  
    // The conversion failed.  
} 
+0

なぜこれがダウンリストされましたか? – MGZero

+1

@MGZero誰かが変態であり、答えを下降させています。 – Kiril

+0

最近、ここのソート順が好きです。 –

2

よしを使用したので、最初に少しbackroundの。あなたの例では、firは文字列として宣言されています。 int(fir)(int(int)firと同じ)を実行しようとすると、文字列から整数へのCスタイルのキャストが試行されました。基本的には、C++のCスタイルのキャストが使用可能なすべてのキャストを実行し、最初に動作するキャストを使用するため、ガベージが発生します。あなたの使用している文字エンコーディング(UTF-8、asciiなど)に依存する文字2を表すメモリ値を取得することをお勧めします。たとえば、firに "2"が含まれていた場合、0x32を整数値として取得する可能性があります(asciiを仮定)。実際にはCスタイルのキャストは使用しないでください。実際に使用するのが安全な唯一の場所は、数値型間の変換です。

あなたの例のような与えられた文字列の場合、最初にstrtokのような関数を使って文字列を関連する文字列(トークン)に分割する必要があります。この単純な例では、 "2"、 "+"、 "2"となります。これを済ませたら、整数に変換したい文字列のatoiなどの関数を簡単に呼び出すことができます。

例:

string str = "2"; 
int i = atoi(str.c_str()); //value of 2 

あなたにも非整数の数字を扱うことができるようにしたい場合は、これは少し複雑になります。その場合、最善の策はオペランド(+ -/*など)で区切り、小数点の数値文字列を検索することです。あなたが1つを見つけたら、それをダブルとして扱い、atoiの代わりに関数atofを使うことができます。そうでなければ、atoiに固執してください。

関連する問題