如果有条件使用String.length()的条件,为什么不一致地评估这一点


int main()
{
    std::string string = "hi";
    std::cout << "Enter index: ";
    int index;
    std::cin >> index;
    if(index < string.length())
        std::cout << index << " is less than " << string.length();
    else
        std::cout << index << " is greater than " << string.length();
}

字符串长度为2。当我输入负数时,例如-3时,if语句将评估为false并执行其他语句&amp;Prints -3大于2 。如果我输入的正数仍然小于字符串长度,例如1,如果语句评估为true&amp;印刷 1小于2

问题:

因此,-3和1都小于字符串。Length((,为什么只有1评估为true而-3在此中不在此语句中?

当您将intunsigned int进行比较时,int转换为unsigned int。因此,如果以前是负值,它将成为一个很大的积极整数。这就是为什么它变得比字符串的大小更大。

尝试这样做:

 unsigned int x = 100;
 int y = -1;
 std::cout << (x < y? "Yes" : "No" << std::endl; //prints Yes
 std::cout << static_cast<unsigned int>(y) << std::endl; //prints big +ve number

请注意,std::string::size()std::string::length()都返回std::string::size_type,这只是某些 unsigned积分类型的别名,可以是unsigned intunsigned longsize_t(通常是某些unsigned积分类型的别名(。

尝试此

因为.length或.size是一个无符号的int,因此常规int会自动转换。将其存储在INT数据类型的变量中,这应该解决您的问题。

int main()
{
    std::string string = "hi";
    std::cout << "Enter index: ";
    int index;
    int length = string.size();
    std::cin >> index;
    if(index < length)
        std::cout << index << " is less than " << string.length();
    else
        std::cout << index << " is greater than " << string.length();
}

相关内容

最新更新