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]
return 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
您可以通过括号获得字符“7”,其 ASCII 码为 55 (48+7)。
问题是您分配test[3]
给 type 的变量int
,从而导致打印实际的字符代码 (55) 而不是表示的字符 ( '7'
)。替换int
为char
或static_cast
在打印之前。
使用 atoi:
int atoi (const char * str); //将字符串转换为整数
例如:
string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;
你不“投”,你“转换”。
您可以使用 sscanf()、atoi() 等函数来转换字符串的值:
int iret = sscanf (test, "%d", &a);
test[3] 的值是 ASCII 字符“7”,实际上是整数“55”。
PS:“sscanf()”的美妙之处在于,您可以通过检查“iret!= 1”轻松检测是否发生解析错误。