数组下标是从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 指的是,新数组的长度;