علتش اینه که طول رشته ای که بهت میده به صورت unsigned هست و اعداد منفی رو پوشش نمیده
unsigned int t = 2;
cout << t - 3 << endl;
string s = "tt";
cout << s.length() - 3 << endl ; // output are same
اگه بخوای درست عمل کنه باید cast کنیش به یک نوع متغیر که منفی ها رو هم قبول کنه
cout << (int)s.length() - 3 << endl ;