学校的字符串数组习题,为什么运行出来有问题呢?希望告知具体出错步骤

img

#include<iostream>
using namespace std;
int delet(char a[20])
{
    int i=0,num=0,j,k;
    while(a[i])
    {
        j=i+1;
        if(a[j])
        {
            if(a[j]==a[i])
            {k=j+1;num+=1;
            if(a[k])
            {
                while(a[k]){a[k-1]=a[k];k++;}
            }
        
            }
            else {j+=1;}
        }
        
    i++;
        }return num;
}


int main()
{
    char a[20];
    cin>>a;
    delet(a);
    cout<<"重复个数为:"<<delet(a)<<'\t'<<"删除后数据为"<<a<<endl;
    getchar();
    getchar();
}


img

img


int delet(char a[20])
{
    int i=0,num=0,j,k;
    while(a[i])
    {
        j=i+1;
        while(a[j])//此处从if改成while,因为要数组的前面的元素,要和后面每一个元素进行比较
        {
            if(a[j]==a[i])//如果此在相同的,就把相同元素之后的一个k元素,
            {                // 以及k元素之后的所以元素向前移动,if内部while功能目的就是这样
                k = j + 1;
                num += 1;//计数一次
                while(a[k])
                {
                    a[k-1] = a[k];
                    k++;
                }
                a[k-1] = a[k];//j + 1元素之后向前移动,数组就少了一个元素,就把\0赋值给最后一个元素
            }
            else              //书上的伪代码作为参考,不能完全照搬,理解消化转为自己思路
            {
                j+=1;
            }
        }
        i++;
     }
    return num;
}