C++ 无法比较字符串位置和 int [duplicate]

C++ can't compare string position and int [duplicate]

提问人:Gabriel Brito de França 提问时间:11/19/2022 更新时间:11/19/2022 访问量:193

问:

#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为什么与变量比较不起作用

C++ 字符串 整数 比较

评论


答:

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 字符。