i为-1,却大于字符串长度str.length()的原因:str.length()的返回值不是int

简化后的问题代码

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值