在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;
}
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;
}
//题目意思是找出数组中所有等于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);
。