c语言中数组下标的加减,平移总结

数组下标是从0开始编号的;

当前数组下标就是该元素之前元素的个数。

无论是从从0开始下标,还是从1开始下标,两下标之差是一样的,都表示b比a多了几个元素。

前言:

加法的理解:

a+2= b

表示b比a多2;

减法的理解:

b-2=a;

加减法是数量上多几个,少几个。加几就是多几个,也是指针向后挪动了几个;减几就是少几个,也是指针向前挪动了几个;

 数组下标是从0开始的,即数组第一个元素是str[0];

从0开始下标,当前下标值即为前面元素的个数。

数组的长度是数组最后一个元素的下一位的下标length,----->表示之前有length个元素。

for(int i = 0;i<length;i++){}

length是数组的长度

pos =0;

pos+=2;  //指向下标为2的元素;

pos+=2; //指向下标为4的元素;,数组之前有4个元素;

pos = 4;//数组之前有4个元素;

pos-=2; //指向下标为2的元素;

小结:

数组指针,从起始位置0 ,然后+N,表示指针向后挪动N个位置,数组指针指向了下标为N的元素。同时剩余数组长度就少了N个。

数组指针,从length位置-N,表示指针向前挪动N个位置,数组指针指向了下标为 length-N的元素,同时,剩余数组长度为length-N.

以如下示例  ,给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度分析数组下标:

int lengthOfLongestSubstring(char * s){
    int strLen = strlen(s);
    int maxLen = 1;
    int count ;
    char *str = s;
    int i,j;
    int k = 0;
    if(strLen == 0)//字符串为空串
    {
        return 0;
    }
    for(i=1;i<strLen;i++)//strLen是指字符串的长度,同时也是字符数组的最后一个字符的下一位。
    {
        count = 1;        //字符串每次比较,count重新计数
        for(j=0;j<i-k;j++)//i-k是新串的长度,同时也是新的字符数组的最后一个字符的下一位。
        {
            if(s[i]==str[j])
            {
                str = str+j+1;//重复的话,str指向重复字符的下一个字符
                k = k+j+1;//k记录str共向后移动的字符数//向后移动的个数==去掉的字符个数              
                break;  //str成为一个新串,重新开始比较                
            }else
            {
                count++;        //不重复的情况时,计数值++                
            }
        }
        maxLen = maxLen>count?maxLen:count;//求最大字符长度//跳出for循环就意味着串比较结束
    }
    return maxLen;
    
 
}

for(j=0;j<i-k;j++)//i-k是新串的长度,同时也是新的字符数组的最后一个字符的下一位。
        {
            if(s[i]==str[j])
            {
                str = str+j+1;//重复的话,str指向重复字符的下一个字符
                k = k+j+1;//k记录str共向后移动的字符数//向后移动的个数==去掉的字符个数              
                break;  //str成为一个新串,重新开始比较                
            }else
            {
                count++;        //不重复的情况时,计数值++                
            }
        }

上例中的 j<i-k  中,i-k 指的是,新数组的长度;

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值