string s;
cin >>s ; //input string is: a
int i=1;
if(i < s.size()-3 ) cout <<"Yes"<<endl;
else cout << "No"<<endl;
If the input string is a
then output should be No
but compiler is showing Yes
.
int i = 1;
int len = s.size()-3;
if(i < len ) cout <<"Yes"<<endl;
else cout << "No"<<endl;
If I use the len
variable then it is working fine. Now the output is showing No
.
CodePudding user response:
s.size()
returns an unsigned type.
Since s.size()
is 1
in your example, unsigned(1)-3
will wrap to a very large unsigned value. Thus:
if(i < s.size()-3)
will compare i
as an unsigned value, and evaluate as true
since 1
is less than that large value.
Whereas:
int len = s.size()-3;
will convert the large value into a signed negative value, thus:
if(i < len)
will evaluate as false
since 1
is not less than a negative value.
CodePudding user response:
s.size()
returns an unsigned int
, so if s.size() < 3
then s.size() - 3
becomes very big positive integer. So it can be possible.