【无标题】

检查两个字符串数组是否相等
在这里插入图片描述

我的思路:
遍历,这样节省空间,不用另外创建空间,直接双for肯定是有问题的,因为数组中存放多个字符串,串长不同,所以就要四个变量来确定当前遍历的位置,如果发现不等就立即退出,每次换下一个串的时机,不能是内层for退出,是到该串的结尾,就要换下一个串,而且另一个串不一定也要换,所以要进行判断,并且换串后,对之前遍历串的下标重新置0

bool arrayStringsAreEqual(char ** word1, int word1Size, char ** word2, int word2Size){
    int i1,i2,j1=0,j2=0;
    for(i1=0,i2=0;i1<word1Size&&i2<word2Size;)
    {
        for(;j1<strlen(word1[i1])&&j2<strlen(word2[i2]);j1++,j2++)
        {
            if(word1[i1][j1]!=word2[i2][j2])//遇到字母不同直接返回FALSE
            return false;
        }
        if(i1<word1Size&&j1==strlen(word1[i1]))
        {i1++;j1=0;}//j要置0
        if(i2<word2Size&&j2==strlen(word2[i2])) 
        {i2++;j2=0;}
    }
    // if(i1==word1Size&&(i2<word2Size||j2<strlen(word2[i2])))
    // return false;
    // if(i2==word2Size&&(i1<word1Size||j1<strlen(word1[i1])))
    // return false;
    printf("%d %d %d %d\n",i1,i2,j1,j2);
    //if(i1==word1Size&&i2==word2Size&&j1==strlen(word1[i1-1])&&j2==strlen(word2[i2-1]))
    if(i1==word1Size&&i2==word2Size)//i1==wordsize1说明此时word1数组已经将所有元素遍历完成,那么j1必然是0;i2,j2同理;都遍历结束而没有中途退出,说明完全相等,这里不必再比较j的值
    return true;
    return false;
}

一个遍历敲了20分钟,太菜了,看了题解有自己略有不同,确实代码精简,秒

bool arrayStringsAreEqual(char ** word1, int word1Size, char ** word2, int word2Size) {
    int p1 = 0, p2 = 0, i = 0, j = 0;
    while (p1 < word1Size && p2 < word2Size) {
        if (word1[p1][i] != word2[p2][j]) {
            return false;
        }
        i++;
        if (word1[p1][i] == '\0') {
            p1++;
            i = 0;
        }
        j++;
        if (word2[p2][j] == '\0') {
            p2++;
            j = 0;
        }
    }
    return p1 == word1Size && p2 == word2Size;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值