2016-04-14 46 views
1

charをintに変換する際に経験したことのないユニークな問題がC++で発生しています。C++で正しくcharをintに変換する方法は?

私のように読み込むtotal_lineと呼ばれる整数の文字列を反復処理しています:

cout << total_line[i+1] <<endl; 
int d = total_line[i+1] <<endl; 
cout << d << endl; 
i++; 

:ここで私はint型に他のすべての文字を変換しようとしている

1526 

とは私のコードです私の出力は、これが変わったのです:

5 
53 
6 
54 

私はなぜ5がint 53に変換されているのかわからない、6がbeinですgが54

+0

十分なコードが表示されていません。 'total_line'の宣言、初期化の仕方、変数' i'の値を見せてください。 – abelenky

+3

charは本質的にASCIIとして入力されています。 ''5 '== 53'。 [ASCIIテーブル](http://www.asciitable.com/)を見てください。 – user2475059

+0

あなたが混乱している数字(5のように、私の手の指の数)の数字「5」(文字「S」によく似ていますシンボル)のような数字の表現、と。 –

答えて

3

他にも言及したように、文字は実際には文字テーブルにマップされた数字として表されます。数値から文字へのマップは、選択された文字セットによって異なります。、US-ASCIIの場合、'1'および'2'は数字49および50(see here for the full US-ASCII table)に対応します。

数値の文字列表現を符号付き整数に変換するには、std::stoi(C++ 11以降)を使用します。

次のスニペットは、それぞれ、その個々の数字に文字列を切り刻むと数字に変換するstd::stoiを使用します。標準ライブラリの関数std::stoiを使用して

for (std::string::size_type i = 0, n = total_line.size(); i != n; ++i) { 
    int d = std::stoi(total_line.substr(i, 1)); 

    std::cout << d << std::endl; 
} 

は関係なく、文字エンコーディングの作業の利点を持っています。

0

この行は非常に奇妙に見えるint型に変換:

int d = total_line[i+1] <<endl; 

ストリームoperator<<endlが何をしているのですか?

どうしてこのようにしないのですか?

int d = total_line[i+1]; 
0

あなたは位置i代わりのi+1から読み取る必要があり、また、余分なendlは、2行目にありました。取得しようとする文字の値はASCIIです。それらをintに変換するには、ASCII値「0」をそれから減算する必要があります。また、forループで操作している場合、明示的にインクリメントする必要はありません。iそれは多分これが役立つことがあります文字

にスキップ理由です:

cout << total_line[i] <<endl; 
int d = total_line[i]; 
cout << d - '0' << endl; 
2

だけascii table(Linux上の男性のASCII)を見て

 Oct Dec Hex Char 
    --------------------- 
    060 48 30 0 
    061 49 31 1 
    062 50 32 2 
    063 51 33 3 
    064 52 34 4 
    -> 065 |53| 35 |5| 
    -> 066 |54| 36 |6| 
    067 55 37 7 
    070 56 38 8 
    071 57 39 9 

だから、あなたが見ることができる理由5が255と53と6から54に変換されたのは、の値がの文字の '5'が5ではなく53(6と同じ)であるためです。 、

int d = total_line[i] - 48; 

portabilityのため(ピート・ベッカーのおかげで):

int d = total_line[i] - '0'; 

は、私はあなたにこれをお勧めしません。

あなたはこのような何かをしようとintに文字を変換したい場合誰もが小数点の '0'を知っているわけではなく、直接使用すると '0'がわかりやすいと思います。

+0

あなたは男です。ありがとうございました! –

関連する問題