string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
出力は 7 番だと思っていたのですが、代わりに 55 になりました。私はさまざまな投稿を検索しましたが、それらはすべて問題なくこの方法を使用しました..私の場合、問題がどこにあるのかわかりません。ご協力ありがとうございました!
string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
出力は 7 番だと思っていたのですが、代わりに 55 になりました。私はさまざまな投稿を検索しましたが、それらはすべて問題なくこの方法を使用しました..私の場合、問題がどこにあるのかわかりません。ご協力ありがとうございました!
test[3]
char
これを整数に変換しているため、文字の ASCII 値が返されます。3
ASCII では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
ASCII コード 55 (48+7) を持つ角かっこで char '7' を取得します。
問題はtest[3]
、タイプ の変数に代入することですint
。これにより、表される文字 ( ) の代わりに実際の文字コード (55) が出力されます'7'
。または印刷前にint
置き換えます。char
static_cast
「キャスト」ではなく、「変換」します。
sscanf()、atoi() などの関数を使用して、文字列の値を変換できます。
int iret = sscanf (test, "%d", &a);
test[3] の値は ASCII 文字 '7' で、実際には整数の "55" です。
PS: "sscanf()" の優れた点は、"iret != 1" をチェックすることで、解析エラーが発生したかどうかを簡単に検出できることです。
アトイを使用:
int atoi (const char * str); //文字列を整数に変換
例えば:
string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;