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在此中不在此语句中?
当您将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
积分类型的别名,可以是unsigned int
,unsigned long
或size_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();
}