数据结构基础训练

242 阅读4分钟

C#的数组与字符串

一.数组

1.声明

  • 语法
    datatype[] arrayName=new int[4]
    string[] name=new string[count]
    声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。

2.初始化

另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。

1.int[] data={20,00,10,15};
2.int[] data; data=new int[4];
3int[] data; data=new int[5]{20,00,10,15}

注意: 元素个数要与定义的长度一致。如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。

3.不规则数组声明

  • 语法形式: tyoe[][][]arrayName; 方括号[]的个数与数组的维数有关。

例如:int[][]jagged

  • 创建数组对象 以二维不规则数组为例: image.png

4.访问数组成员

  • 访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5;

下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;

5.对数组使用 foreach

  • 该语句提供一种简单、明了的方法来循环访问数组的元素。foreach中的in表示我们要遍历哪个数组,i表示我们要访问的各个数组元素,其类型根据数组类型而定(比如此处是int),但foreach不知道数组元素的索引。
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers){System.Console.WriteLine(i);}

有点类似于for循环的功能。 对于多维数组,可以使用相同方法来循环访问元素。

int[] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers){Console.Write("{0} ", i);}

注意 由于有了多维数组,使用嵌套 for 循环可以更好地控制数组元素。

二.字符串

1.字符串的性质

  • 字符串的不可变性:字符串是一个常量。
  • 字符串的拘留池机制: 当一个字符串已经被创建,那么以后每次创建相同值的字符串时会直接引用它的地址值,无需为自己的值开辟新的内存空间。

2.字符串的处理

字符串可以当作字符char类型的数组

  • 以下函数均对原字符串无影响,但是需要另一个string类型变量接受。 | 函数|实现的功能 | | --- | --- | | name.Length | 访问字符串长度 | | name.ToLower|转换成小写并返回 | | name.ToUpper | 转换成大写并返回 | | name.Trim() | 去掉字符串前面和后面的空格 | | name.TrimStart() | 去掉字符串前面的空格 | | name.TrimEnd() | 去掉字符串后面的空格 | | name.Split() | 原字符串按照指定的字符进行拆分,得到一个拆分后的字符串数组,指定的字符放在单引号里面。 |
    | name.IndexOf()|查找某个字符在字符串中的位置 | |name.SubString() | 从字符串中截取子字符串|

注意:Split访问的是字符串数组,要用字符串数组接收(不能用string类型变量)
例如:

string str = "my-mind-will-be-concentrated";
string[] str2 = str.Split('-');
Console.WriteLine(str + ".");
foreach(string temp in str2)
{
	Console.WriteLine(temp);
}

QQ图片20210315002753.png

3.字符串的Format()方法

  • 语法 string myString = string.Format("格式字符串", 参数列表);
  • 例如:
    string myString = string.Format ("{0} 乘以 {1} 等于 {2} ", 2, 3, 2*3);

三.学习心得

学习完后,感觉到无论是C,C++,还是python语法等等都有很多相同之处,学起来更容易一些。c#中的诸多函数能很好的简化代码,能节省空间,但是语法要求比较严格,需要较高的熟练度。学习过程中,看到了很多大佬的解释,与提醒的一些细节,有点大开眼界的感觉了。越发感觉自己还需要多练,多努力。

LeetCode代码训练

1.寻找数组的中心索引

给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。

注意:中心下标可能出现在数组的两端。


public class Solution
    {
        public int PivotIndex(int[] nums)
        {
            int sum = 0;
            int leftsum = 0;
            foreach (int Value in nums)
            {
                sum += Value;
            }
            for (int i = 0; i < nums.Length; i++)
            {
                if (leftsum*2==sum-nums[i])
                    return i;
                leftsum += nums[i];
            }
            return -1;
        }
}

QQ图片20210317215150.png

2.搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。

public class Solution
    {
        public int SearchInsert(int[] nums, int target)
        {
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] > target || nums[i] == target)
                {
                    return i;
                }
                else if (target > nums[nums.Length - 1]) return nums.Length;
            }
            return 0;
        }
    }

~W7SKHX}J51SCD4XQ@(IQJB.png

3.零矩阵

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

public class Solution {
    public void SetZeroes(int[][] matrix) 
    {
    
            bool[] row = new bool[matrix.Length];
            bool[] column = new bool[matrix[0].Length];
            for (int i = 0; i < matrix.Length; i++)
            {
                for (int j = 0; j < matrix[0].Length; j++)
                {
                    if (matrix[i][j] == 0)
                    {
                        row[i] = true;
                        column[j] = true;
                    }
                }
            }
            for (int i = 0; i < matrix.Length; i++)
            {
                for (int j = 0; j < matrix[0].Length; j++)
                {
                    if (row[i] || column[j])
                    {
                        matrix[i][j] = 0;
                    }
                }
            }

        }
    }

XCHV~5MQ6JZ23H5@FNCPEWX.png