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,并执行else语句&amp; print -3大于2 。如果我输入一个仍然小于字符串长度的正数,比如1,if语句的计算结果为true&amp; print 1小于2 。
问题:
因此,虽然-3和1都是小于string.length()的数字,但为什么只有1评估为true而-3不在if语句中?
答案 0 :(得分:2)
将int
与unsigned 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
整数类型的别名,可能是{{} 1}},unsigned int
或unsigned long
(通常是某些size_t
整数类型的别名)。
答案 1 :(得分:1)
试试这个
因为.length或.size是unsigned 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();
}