删除阵列元素 C
我写了以下程序以删除用户输入的数组元素。
它适用于大多数投入,但当入口是如此:
/这里
重复顺序/, 和删除的元素
, 出口-
.
如何更改程序,以便删除输入元素的所有实例?
</conio.h></stdio.h>
#include <stdio.h>
#include <conio.h>
void main// {
int j, i, a[100], n, key, l;
clrscr//;
printf/"Enter the number of elements:"/;
scanf/"%d", &n/;
printf/"\nEnter the elements:\n"/;
for /i = 0; i < n; i++/
scanf/"%d", &a[i]/;
printf/"\nEnter the element to delete:"/;
scanf/"%d", &key/;
l = n; //Length of the array
for /i = 0; i < l; i++/ {
if /a[i] == key/ {
for /j = i; j < l; j++/
a[j] = a[j + 1];
l--; //Decreasing the length of the array
}
}
printf/"\nThe new array is \n"/;
for /i = 0; i < l; i++/
printf/"%d ", a[i]/;
getch//;
}
它适用于大多数投入,但当入口是如此:
1 2 2 3 5
/这里
2
重复顺序/, 和删除的元素
2
, 出口-
1 2 3 5
.
如何更改程序,以便删除输入元素的所有实例?
</conio.h></stdio.h>
没有找到相关结果
已邀请:
7 个回复
裸奔
赞同来自:
我们将遵循字符串的行
</div>
<div class="answer_text">
如果您不关心数组中项目的顺序,则可以在新形成的差距中移动阵列的最后一个元素 /cryplomily每单位减少阵列的长度/. 它可以比重点的速度更效率:就计算机科学而言,它意味着删除该元素 O/1/, 但不是 O/N/.
如果你的索引 i 在数组上停靠,您想再次重复此元素的周期:
例如,要删除所有项目 '3' 从长度阵列 'l':
如果你
真的
处理阵列中元素的程序,然后大量使用 memmove, 并且请勿手动移动元素。 它适用于原始和目标内存重叠的位置。
memmove/a + i, a + i + 1, sizeof/a[0]/ * /l - i - 1//;
</div>
<div class="answer_text">
改变 "if" 在 "while":
for/i=0;i<l;i++ &&="" <="" a[i]="key/" a[j]="a[j+1];" array="" decreasing="" div="" for="" i<l="" j="i;j<l;j++/" l--;="" length="" of="" the="" while="" {="" }="">
<div class="answer_text">
使用新的数组。
</stdio.h></div>
<div class="answer_text">
你的方法S. 2 嵌套循环
太折叠了。 您可以简单地使用索引扫描数组
并复制除此之外的所有元素
, 与另一个指数
. 阵列的产生长度是有限值
.
这是一个修改的版本:
记录:
原型
没有参数是
, 它被认为是恢复的好风格
成功。
始终检查返回值
. 这可以防止对不可接受的输入的许多错误和不确定行为。 当输入根本无效时,它还节省了大量的时间查看错误的地方。
避免命名变量
, 因为她看起来太接近了
在许多字体上具有固定步骤。
始终使用新行完成程序输出。
</conio.h></stdio.h></div>
</l;i++></div></l;i++></div></l;j++>
莫问
赞同来自:
让我们来吧你的榜样
我们将遵循字符串的行
奔跑吧少年
赞同来自:
如果你的索引 i 在数组上停靠,您想再次重复此元素的周期:
例如,要删除所有项目 '3' 从长度阵列 'l':
如果你
真的
处理阵列中元素的程序,然后大量使用 memmove, 并且请勿手动移动元素。 它适用于原始和目标内存重叠的位置。
memmove/a + i, a + i + 1, sizeof/a[0]/ * /l - i - 1//;
奔跑吧少年
赞同来自:
for/i=0;i<l;i++ &&="" <="" a[i]="key/" a[j]="a[j+1];" array="" decreasing="" div="" for="" i<l="" j="i;j<l;j++/" l--;="" length="" of="" the="" while="" {="" }="">
<div class="answer_text">
使用新的数组。
</stdio.h></div>
<div class="answer_text">
你的方法S. 2 嵌套循环
太折叠了。 您可以简单地使用索引扫描数组
并复制除此之外的所有元素
, 与另一个指数
. 阵列的产生长度是有限值
.
这是一个修改的版本:
记录:
原型
没有参数是
, 它被认为是恢复的好风格
成功。
始终检查返回值
. 这可以防止对不可接受的输入的许多错误和不确定行为。 当输入根本无效时,它还节省了大量的时间查看错误的地方。
避免命名变量
, 因为她看起来太接近了
在许多字体上具有固定步骤。
始终使用新行完成程序输出。
</conio.h></stdio.h></div>
</l;i++></div></l;i++>
八刀丁二
赞同来自:
</stdio.h></div>
<div class="answer_text">
你的方法S. 2 嵌套循环
太折叠了。 您可以简单地使用索引扫描数组
并复制除此之外的所有元素
, 与另一个指数
. 阵列的产生长度是有限值
.
这是一个修改的版本:
记录:
原型
没有参数是
, 它被认为是恢复的好风格
成功。
始终检查返回值
. 这可以防止对不可接受的输入的许多错误和不确定行为。 当输入根本无效时,它还节省了大量的时间查看错误的地方。
避免命名变量
, 因为她看起来太接近了
在许多字体上具有固定步骤。
始终使用新行完成程序输出。
</conio.h></stdio.h></div>
</l;i++>
涵秋
赞同来自:
</stdio.h>
郭文康
赞同来自:
太折叠了。 您可以简单地使用索引扫描数组
并复制除此之外的所有元素
, 与另一个指数
. 阵列的产生长度是有限值
.
这是一个修改的版本:
记录:
原型
没有参数是
, 它被认为是恢复的好风格
成功。
始终检查返回值
. 这可以防止对不可接受的输入的许多错误和不确定行为。 当输入根本无效时,它还节省了大量的时间查看错误的地方。
避免命名变量
, 因为她看起来太接近了
在许多字体上具有固定步骤。
始终使用新行完成程序输出。
</conio.h></stdio.h>