提问人:Gabriel Brito de França 提问时间:11/19/2022 更新时间:11/19/2022 访问量:193
C++ 无法比较字符串位置和 int [duplicate]
C++ can't compare string position and int [duplicate]
问:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string codigo = "12345678917";
int remainder = 7;
if (remainder == codigo[10]) {
cout<<"equal" << endl;
}
return 0;
}
这只是一个简单的比较。此代码不打印“equal”。
我将 int 的类型更改为 char 或字符串,但它不起作用。我尝试了比较方法,但仍然一无所获。我在这里遗漏了什么?
当我将余数更改为“7”时,它确实有效。但是idk为什么与变量比较不起作用
答:
2赞
White Wizard
11/19/2022
#1
在您的代码中,您将 int 与 char 进行比较,在这种情况下,将存在从 char 到 int 的隐式转换。
用
cout << "int value: " << (int)codigo[10] << endl;
您可以看到字符的 int 值为 55,因为 7 不等于 55,则条件为不成立。 如果您只是将类型更改为 char,它也不起作用,因为这会将 7 转换为不是字符“7”的字符。
在 7 两边使用单引号会导致该值为字符文本,因为它存储在 int 中,其值将为 55。由于这等于 codigo[10] 的字符值,因此条件为真。
评论
1赞
user4581301
11/19/2022
旁注:在一些越来越不寻常的系统上,你不会得到 55 的编码值“7”,但最终结果将是相同的。您不能将“7”放在编码 7 处,因为这意味着您必须将“0”放在编码 0 处,并且 0 保留用于终止 c 样式字符串的 null 字符。
评论