C#将string[]Arry遍历,如果其中某个元素等于‘-’,则将该元素删除,剩下的元素组成新数组Arry1
时间: 2024-11-12 12:34:44 浏览: 9
在C#中,你可以使用`List<T>`或者`Array`类配合循环来实现这个需求。这里提供两种方法:
**方法一:使用List<T>**
```csharp
using System;
using System.Collections.Generic;
public List<string> RemoveMinus(string[] array)
{
List<string> arry1 = new List<string>();
foreach (string item in array)
{
if (item != "-")
arry1.Add(item);
}
return arry1.ToArray(); // 如果需要转换回数组,可以使用此行
}
```
**方法二:直接在原数组上修改(适用于数组且不需要返回新的数组)**
```csharp
for (int i = 0; i < array.Length; i++)
{
if (array[i] != "-")
continue; // 跳过等于"-"
else
Array.Resize(ref array, i); // 删除当前元素,并缩短数组长度
}
```
以上代码会遍历数组,遇到'-'就跳过或者删除相应元素。如果你需要生成一个新的数组作为结果,记得使用第一种方法,因为它不会改变原始数组。
相关问题
遍历数组Arry中的每一个元素,当有元素等于‘-’时则将其删掉,形成新的数组Arry1
在 C# 中,遍历数组并删除等于 `'-'` 的元素可以使用 `List<T>` 或 `Array` 的线性搜索,下面是两种常见的方法:
**使用 List<T>:**
```csharp
List<char> Arry = new List<char> { 'a', '-', 'b', '-', 'c' }; // 假设 Arry 是字符列表
List<char> Arry1 = new List<char>();
foreach (char element in Arry)
{
if (element != '-')
{
Arry1.Add(element);
}
}
// 将 List 转换回数组
char[] newArry1 = Arry1.ToArray();
```
**使用 Array:**
```csharp
char[] Arry = { 'a', '-', 'b', '-', 'c' };
int length = Array.IndexOf(Arry, '-'
{
Array.Copy(Arry, 0, newArry1, 0, length); // 保存到新数组的开始部分
Array.Copy(Arry, length + 1, newArry1, length, Arry.Length - length - 1); // 从第二个 '-' 后复制剩余元素
}
else
{
newArry1 = Arry; // 如果不存在 '-', 直接赋值
}
```
这两种方法都会创建一个新的数组(`newArry1`),其中不包含 `'-'`。
#include<stdio.h> #include<stdlib.h> #include<malloc.h> //插入排序法 int InsertRange(int arry[]) { //遍历数组中除了第一个元素(默认为有序)以外的所有元素以便将这些未排序的元素一个个分别插入 int i; int length; for(i=1;i<length;i++) { int inserted=arry[i];//将待插入的变量临时储存 int j; j=i-1; for(;j>=0&&arry[j]>arry[i];j--)//将待插入的元素与前面的每个元素依次比较 { arry[j+1]=arry[j]; } arry[j]=inserted; } return *arry; } //主函数 int main() { int i; int n;//定义动态数组的最大长度 int* arry; int length; printf("请输入所需要创建的一维动态数组的长度:\n"); scanf("%d",&n); if((arry=(int*)malloc(sizeof(int)*n))==NULL) { printf("分配动态存储空间失败!\n"); } for(i=0;i<n;i++) { printf("请输入第%d个数据:\n",i); scanf("%d",arry[i]); } length=n; InsertRange(arry); printf("排序后的列表为:\n"); for(i=0;i<n;i++) { printf("%d\t",arry[i]); } return 0; } 修改代码,并指出错误
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 插入排序法
void insertSort(int arr[], int n) {
// 遍历数组中除了第一个元素(默认为有序)以外的所有元素以便将这些未排序的元素一个个分别插入
for (int i = 1; i < n; i++) {
int inserted = arr[i]; // 将待插入的变量临时储存
int j;
for (j = i - 1; j >= 0 && arr[j] > inserted; j--) { // 将待插入的元素与前面的每个元素依次比较
arr[j + 1] = arr[j];
}
arr[j + 1] = inserted;
}
}
// 主函数
int main() {
int n; // 定义动态数组的最大长度
printf("请输入所需要创建的一维动态数组的长度:\n");
scanf("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n); // 分配动态存储空间并检查是否分配成功
if (arr == NULL) {
printf("分配动态存储空间失败!\n");
return 1;
}
for (int i = 0; i < n; i++) {
printf("请输入第%d个数据:\n", i + 1);
scanf("%d", &arr[i]);
}
insertSort(arr, n);
printf("排序后的列表为:\n");
for (int i = 0; i < n; i++) {
printf("%d\t", arr[i]);
}
free(arr); // 释放动态存储空间
return 0;
}
```
错误1:`InsertRange`函数返回值应该为`void`,因为数组本身就是被修改的,不需要再返回。
错误2:动态数组的长度应该从用户输入中获取,而不是在代码中预先指定。
错误3:`scanf("%d", arry[i]);`应该改为`scanf("%d", &arry[i]);`,因为scanf函数需要传入变量的地址。
错误4:数组下标应该从0开始。
错误5:插入排序中的变量`inserted`应该在内层循环之前定义,因为内层循环中的比较会修改该值。
错误6:内层循环中的判断条件应该是`&& arr[j] > inserted`,因为插入排序是将待插入元素与已排序元素从后向前依次比较,如果已排序元素比待插入元素大,则将该元素向后移动一个位置,直到找到一个已排序元素比待插入元素小的位置。
错误7:在内层循环中,将待插入元素插入到正确的位置时,应该是将其插入到`arr[j + 1]`的位置上。
错误8:在用户输入数据时,应该输出`i + 1`而不是`i`,因为数组下标从0开始,用户更容易理解从1开始输入的数据。
阅读全文