简化后的问题代码
int i = -1;
string str="abc";
if(i<str.length())
cout<<"success";
理论原因
string.length()返回值为size_t ,是一个unsigned integral type而不是int。
当我们用string.length()与int进行大小比较时,int值会被隐式转成unsigned integral,在用负的int与string.length()进行比较时就会出错
解决方案
int len = str.length()或(int)word3.length()
详细出错代码
class Solution {
public:
string mergeAlternately(string word1, string word2)
{
char* ptr1 = &word1[0];
char* ptr2 = &word2[0];
string word3 = word1.length()<word2.length()?word1 + word2:word2 + word1;
int i = -1;
while(*ptr1 != '\0' && *ptr2 != '\0' && i<word3.length())
//此处如果为(int)word3.length()就正确
{
word3[++i]=*ptr1++;
word3[++i]=*ptr2++;
}
return word3;
}
};
参考:CSDN博主qingtu01