关于#c++#的问题:字符串删除空格时出现异常。

img

代码希望删除字符串中的数字和空格。但是得到的结果是,空格之后的值删除就会出问题,直到遇到非空格之后可以正常删除,再遇到空格就重复之前问题。想请问是什么原因,以及如何解决。


/*删除字符串中的数字和空格。*/
#include

/*求字符串长度*/
int len_s(char s[]) {
    int len = 0;
    while (s[len]) {
        len++;
    }
    return len;
}

/*求数组长度*/
int len_i(int s[]) {
    int len = 0;
    while (s[len]) {
        len++;
    }
    return len;
}

/*后一位元素补至前一位*/
void complement(char s[],int n) {
    int i;
    for (i = n; i < len_s(s); i++) {
        s[i] = s[i + 1];
    }
}

/*删除数字和空格*/
void del_digit(char s[]) {
    int i;
    int j;
    int de_num[] = { '0','1','2','3','4','5','6','7','8','9',' '};
    for (i = 0; i < len_s(s); i++) {
        for (j = 0; j < len_i(de_num); j++) {
            if (s[i] == de_num[j]) complement(s, i);
        }
    }
}

int main(void) {
    char str[] = "ABC12DE  3 4F";
    printf("%s\n", str);
    del_digit(str);
    printf("%s\n", str);

    return 0;
}
int len_i(int s[]) {
    int len = 0;
    while (s[len]) {
        len++;
    }
    return len;
}

这代码不能求出数组长度