核心代码如下:
//以abcac为例子 C语言默认会把字符数组最后加上'\0' 即 abcabc'\0'
for (int i = 0, int j = 0; s[i] != '\0'; i++) {
if (s[i] != 'c') { //i=0 s[0]=a i=1 s[1]=b i=2时 s[2]=c if不成立 i=3 s[3]=a i=4 s[4]=c 不成立
s[j] = s[i]; //s[0]=a s[j]=s[1]=b s[j]=s[2]=s[3]=a
j++; //j=1 j=2 j=3
} //s为新数组: a ab ab aba aba
}
s[j] = '\0'; // for结束 在此处为新数组末尾加上'\0' s = aba'\0'
很多同学不理解 代码中 j 的含义,那么我就来解释一下:
首先理解算法的功能:删除字符数组中指定的某个元素(以c为例)
为了方便同学们理解 ,我把这个数组 s[] 比作一堆苹果,里面有好有坏,而需要删除的某个元素(c)就代表坏苹果。我们需要把这个苹果堆里的坏苹果扔掉,得到一个只有好苹果的苹果堆。我们就需要把这堆苹果中的每一个苹果(s[i])进行判断,如果是好苹果,就按顺序放在好苹果堆里(s[j++]=s[i])或者(s[j]=s[i];j++),如果是坏苹果那就扔掉,不需要放入好苹果堆(啥也不做)。此时i就代表 这一堆苹果中的每一个苹果的下标(包含好坏),而j代表的就是只含有好苹果的苹果堆里每一个苹果的下标。
i :所有苹果中每一个苹果的下标
j :好苹果堆里每一个苹果的下标
具体流程分析: