1
string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;

出力は 7 番だと思っていたのですが、代わりに 55 になりました。私はさまざまな投稿を検索しましたが、それらはすべて問題なくこの方法を使用しました..私の場合、問題がどこにあるのかわかりません。ご協力ありがとうございました!

4

5 に答える 5

6

test[3]charこれを整数に変換しているため、文字の ASCII 値が返されます。3ASCII では55.

charのタイプとして代わりに使用してみてくださいa:

char a = test[3];

std::cout << a; // 3

結果を整数にしたい場合は、 から文字を減算します'0'

std::string test = "3527523";

int a = test[3] - '0';

std::cout << a; // 3
于 2013-05-11T00:18:03.733 に答える
0

ASCII コード 55 (48+7) を持つ角かっこで char '7' を取得します。

于 2013-05-11T00:17:35.077 に答える
0

問題はtest[3]、タイプ の変数に代入することですint。これにより、表される文字 ( ) の代わりに実際の文字コード (55) が出力されます'7'。または印刷前にint置き換えます。charstatic_cast

于 2013-05-11T00:20:09.393 に答える
0

「キャスト」ではなく、「変換」します。

sscanf()、atoi() などの関数を使用して、文字列の値を変換できます。

int iret = sscanf (test, "%d", &a);

test[3] の値は ASCII 文字 '7' で、実際には整数の "55" です。

PS: "sscanf()" の優れた点は、"iret != 1" をチェックすることで、解析エラーが発生したかどうかを簡単に検出できることです。

于 2013-05-11T00:20:50.043 に答える
0

アトイを使用:

int atoi (const char * str); //文字列を整数に変換

例えば:

string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;
于 2013-05-11T00:25:29.780 に答える