在VC用C语言编写函数,删除整型数组a中值为x的所有元素

在VC用C语言编写函数,删除整型数组a中值为x的所有元素。 【提示】给数组赋值时,可以以字符串的形式输入,然后将各个字符转换成数字,从头开始对数组元素逐个进行分析,遇到x就将后面的元素前移一个位置,可删除所有的x

供参考:

#include <stdio.h>
#define N 128
int Delete_x(char *str, int *a, int x)
{
    int i, j;
    for (i = 0,j = 0; str[i]; i++){
        if (str[i] >= '0' && str[i] <= '9' && str[i] - '0' - x)
            a[j++] = str[i] - '0';
    }
    return j;
}
int main()
{
    char str[N];
    int  a[N], i, j, x;
    scanf("%s" ,str);
    scanf("%d", &x);
    j = Delete_x(str, a, x); 
    for (i = 0;i < j; i++)
        printf(i ? " %d" : "%d", a[i]);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Delete_X(int *a, int n, int x)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        if (a[i] == x)
        {
            // 找到一个值为 x 的元素,将后面的元素前移一个位置
            for (j = i; j < n - 1; j++)
            {
                a[j] = a[j + 1];
            }
            n--; // 删除了一个元素,数组长度减一
            i--; // 继续从当前位置查找是否还有值为 x 的元素
        }
    }
}

int main()
{
    // 输入整型数组
    int a[100];
    int n, x;
    printf("请输入数组长度:");
    scanf_s("%d", &n);

    char buffer[1000];
    printf("请输入数组元素,用逗号分隔:");
    scanf_s("%s", buffer, _countof(buffer));

    // 将输入的字符串解析成整型数组
    char *token = strtok(buffer, ",");
    int i = 0;
    while (token != NULL)
    {
        a[i++] = atoi(token);
        token = strtok(NULL, ",");
    }

    printf("请输入要删除的元素值:");
    scanf_s("%d", &x);

    // 删除值为 x 的元素
    Delete_X(a, n, x);

    // 打印修改后的数组
    printf("修改后的数组为:");
    for (i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}

看看这个是否满足要求:

#include <stdio.h>

#define MAX_SIZE 100

int main()
{
    int a[MAX_SIZE], n, x, i, j;

    // 读入数组
    printf("请输入数组元素个数 n:");
    scanf("%d", &n);
    printf("请输入数组元素:");
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }

    // 读入要删除的元素值
    printf("请输入要删除的元素值 x:");
    scanf("%d", &x);

    // 删除元素
    j = 0;
    for (i = 0; i < n; i++)
    {
        if (a[i] != x)
        {
            a[j] = a[i];
            j++;
        }
    }
    n = j;

    // 输出数组
    printf("删除后的数组为:\n");
    for (i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/253676
  • 这篇博客你也可以参考下:C语言从键盘上输入一个字符串,存放在a数组中,并在该串中的最大元素后边插入一个字符
  • 除此之外, 这篇博客: C语言实现迪杰斯特拉算法求最短路径中的 1.找到初始顶点X到各个顶点的权值(这里X为A) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • for (int i = 0; i < n; i++)
    {
    	dist[i] = GetWeight(g,v,i);
    	s[i] = false;
    	if (i != v && dist[i] < MAX_COST)
    		path[i] = v;
    	else
    		path[i] = -1;
    }
    

    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:
    //题目意思是找出数组中所有等于x的元素并删除,其他元素前移填补空位
    void deleteElement(int *a, int x, int n){
        int i, j;
        //i用于记录当前空位所在的下标,j用于遍历后面的元素
        for(i = 0, j = 0; j < n; j++){
            //如果找到了要删除的元素,则继续执行下一次循环(相当于删除)
            if(a[j] == x){
                continue;
            }
            //如果当前元素不是要删除的元素,将其前移填补空位
            else{
                a[i] = a[j];
                i++;
            }
        }
        //将后面的空位填充为0或其他值(根据需求)
        for(; i < n; i++){
            a[i] = 0;
        }
    }
    

    实现思路: 1. 定义一个函数,接收三个参数:数组指针a、要删除的元素值x、数组的长度n。 2. 使用两个变量i和j,其中i用于记录当前空位的下标,j用于遍历后面的元素。 3. 在循环中,当找到一个需要删除的元素时,跳过当前循环,继续下一次循环。 4. 如果当前元素不需要删除,将其放在当前空位上,并将i加1,指向下一个空位。 5. 最后,将数组的后面的空位填充为0或其他值(根据需求)。

    代码中并没有涉及字符与数字的转换问题,因为这并不是本题的难点,可以在赋值数组时进行转换,如 a[i] = atoi(str);