将字符串转换为 int C++ 的错误结果

wrong result of casting string to int C++

本文关键字:错误 结果 C++ int 字符串 转换      更新时间:2023-10-16
string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;

我原本以为输出是第 7 位,但我得到了 55 号。我搜索了不同的帖子,他们都使用这种方法没有任何问题。我只是不知道我的情况问题出在哪里。感谢您的帮助!

test[3]返回char,您要将其转换为整数,因此它返回字符的 ASCII 值。 ASCII 中的355

尝试改用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]分配给类型为 int 的变量,从而导致打印实际字符代码 (55( 而不是表示的字符 ('7' (。打印前,请将int替换为charstatic_cast

你不"投射",你"转换"。

您可以使用 sscanf((、atoi(( 等函数来转换字符串的值:

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

test[3] 的值是 ASCII 字符 '7',实际上是整数 '55'。

附注:"sscanf(("的美妙之处在于,您可以通过检查"iret != 1"来轻松检测是否发生了解析错误。

使用 atoi:

int atoi (const char * str(;//Convert string to integer

例如:

string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;