c语言删除数组12345中的2元素(不用delete函数)
时间: 2024-09-07 21:04:50 浏览: 46
在C语言中,如果你有一个整数数组并且想要删除其中特定值(如2),但又不能直接使用`delete[]`这样的操作,你可以通过创建一个新的数组并复制所有非目标值来达到目的。以下是步骤:
1. 定义新数组的新长度:首先计算原数组中2以外的元素数量。在这个例子中,如果数组只有5个元素,且你想移除所有的2,那么新数组长度将是3。
```c
int count = 0;
for(int i = 0; i < 5; ++i) {
if(arr[i] != 2) {
count++;
}
}
```
2. 动态分配新数组:根据`count`值动态分配内存。
```c
int* newArray = (int*)malloc(count * sizeof(int));
```
3. 复制元素:遍历原数组,将非2的元素复制到新数组中。
```c
int j = 0;
for(int i = 0; i < 5; ++i) {
if(arr[i] != 2) {
newArray[j++] = arr[i];
}
}
```
4. 更新指针:完成复制后,更新指向新数组的指针,并关闭原数组的引用。
```c
arr = newArray;
newArray = NULL; // 或者 free(arr);
```
请注意,这种方法会改变原始数组,因为`arr`现在指向了新数组的位置。这个操作假设源数组不是静态数组,而是动态分配的。
相关问题
c语言 删除数组重复的元素
在 C 语言中,删除数组中重复的元素可以通过以下步骤实现:
1. 遍历整个数组,找到重复的元素。
2. 把重复的元素删除,即把后面的元素往前移动一位。
3. 修改数组的长度,即把数组长度减去删除的元素的个数。
下面是一个示例代码,可以删除整型数组中的重复元素:
```c
#include <stdio.h>
void deleteDuplicate(int arr[], int len) {
int i, j, k;
int count = 0; // 重复元素的个数
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i] == arr[j]) {
count++;
for (k = j; k < len; k++) {
arr[k] = arr[k + 1]; // 把后面的元素往前移动
}
len--; // 修改数组长度
j--; // 继续从当前位置比较
}
}
}
printf("删除重复元素后的数组:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = { 1, 2, 2, 3, 4, 4, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:\n");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
deleteDuplicate(arr, len);
return 0;
}
```
该示例代码中定义了一个 `deleteDuplicate()` 函数,该函数接受一个整型数组和数组的长度作为参数。函数内部使用双重循环遍历整个数组,找到重复的元素,并将后面的元素往前移动一位。同时,函数还统计了重复元素的个数,并修改了数组的长度。最后,函数输出删除重复元素后的数组。
c语言字符数组删除指定元素
可以通过遍历字符数组,将要删除的元素后面的所有元素向前移动一位,以实现删除指定元素的功能。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
void delete_char(char str[], char ch) {
int len = strlen(str);
int i, j;
for (i = 0, j = 0; i < len; i++) {
if (str[i] != ch) {
str[j++] = str[i];
}
}
str[j] = '\0';
}
int main() {
char str[] = "hello world";
char ch = 'l';
delete_char(str, ch);
printf("%s", str);
return 0;
}
```
上述代码中的 `delete_char` 函数用于删除字符数组 `str` 中的指定字符 `ch`。在函数中,使用了两个指针 `i` 和 `j`,其中 `i` 用于遍历整个字符数组, `j` 用于记录删除指定字符后的新字符串长度。当遍历到非指定字符时,将其复制到新字符串中。最后再将新字符串末尾加上字符串结束符 `\0` 即可。
阅读全文