第 4 章 数组与字符串

32
第 4 第 第第第第第第

description

第 4 章 数组与字符串. 主要内容. 几种数组的定义以及使用 字符串的定义以及使用. 4.1 一维数组. 在 C# 中,声明一维数组的语法是在类型后面放一对空的方括号,如下所示: int[] numbers; 数组在被访问之前必须初始化,初始化有 2 种方式。可以由字面形式指定数组的完整内容,也可以先直接指定数组的大小,再使用关键字 new 初始化所有的数组元素。. 声明以及初始化数组. int[] numbers={1 , 2 , 3 , 4 , 5} ; int[] numbers=new int[5]{1 , 2 , 3 , 4 , 5}; - PowerPoint PPT Presentation

Transcript of 第 4 章 数组与字符串

第 4 章 数组与字符串

主要内容几种数组的定义以及使用字符串的定义以及使用

4.1 一维数组在 C# 中,声明一维数组的语法是在类型后面放一对空的方括号,如下所示:

int[] numbers;

数组在被访问之前必须初始化,初始化有2 种方式。可以由字面形式指定数组的完整内容,也可以先直接指定数组的大小,再使用关键字 new 初始化所有的数组元素。

声明以及初始化数组int[] numbers={1 , 2 , 3 , 4 , 5} ;int[] numbers=new int[5]{1 , 2 , 3 , 4 , 5};

当然,我们也可以使用已经赋值的变量来进行初始化,例如:int a=3;

int[] numbers=new int[a]; 数组的下标是从 0 开始,所以上面那行所定义的数组包含以下 3 个元素:元素 nu

mbers[0] ,元素 numbers[1] 以及元素 numbers[2] 。

一个关于数组使用的小例子例 4.1 定义一个字符串数组将几个球员的姓名输入这个数组,并且把他们逆序输出来。

程序代码 using System.Collections.Generic; using System.Text; namespace Example1Of4 { class Program { static void Main(string[] args) { Console.WriteLine(" 请输入球员个数: "); int playerNo = int.Parse(Console.ReadLine()); string[] names = new string[playerNo]; for (int i = 0; i < names.Length; i++) { Console.WriteLine(" 请输入第 {0} 个球员的名字 ",i+1); names[i]=Console.ReadLine(); } Console.WriteLine(" 你输入的球员名字分别是: "); for (int i = 0; i < names.Length; i++) { Console.WriteLine(names[i]); } Console.ReadLine(); } } }

运行结果

4.2 多维数组与交错数组 上面只是定义了一维数组,还可以定义多维数组,语法是在方括号内加逗号。如下所示,定义了一个二维数组: int[,] numbers; 多维数组的初始化与一维数组的初始化很类似,若集体赋值,则要遵循行先序的原则,这些跟其他语言很类似。 int[,] numbers=new int[2,2]{1,2,3,4}; 这样,就是相当于这样给数组赋值: numbers[0,0]=1; numbers[0,1]=2; numbers[1,0]=3; nu

mbers[1,1]=4; 上面的代码也可以写为: int[,] numbers=new int[2,2]{{1,2},{3,4} };

交错数组 在 C# 中,我们还可以定义一种特殊的数组,数组中的每一行可以不相同,这种数组我们称之为交错数组( Jagged Array )。 交错数组的定义例子:

int[][] numbers=new int[3][ ];numbers[0]=new int[2]{ 1,2}; numbers[1]=new int[3] {2,3,4};numbers[2]=new int[2] {6,7}; 对上面声明的交错数组赋值可以为: numbers

[1][1]=6 ;

4.3 ArrayList 类 .NET 框架提供了一个 ArrayList 类。用于建立可变长度的数组,这种数组的数据类型为 Object ,在数组元素中允许存放任何类型的数据。 ArrayList 类包含在 Syste

m.Collections 命名空间中,要在程序的开头添加 System.Collections 命名空间,才可以使用较简洁的对象名称建立 ArrayList 对象类。

ArrayLis 类的方法和属性 ArrayList 类是一种可以按需动态增长的数组。它提供了许多用于操作有用

方法和属性。

4.4 HashTable

在 .NET Framework 中, HashTable 是System.Collections 命名空间提供的一个容器,用于处理和表现类似 key/value 的键值对,这些键 / 值对根据键的哈希代码进行组织。其中 key 通常可用来快速查找,同时 key 是区分大小写的; value 用于存储对应于 key 的值。

HashTable 概述 HashTable 中 key/value 键值对均为 Object 类型,所以 HashTabl

e 可以支持任何类型的 key/value 键值对。 HashTable 是 C# 中一个较为复杂的类型,其构造函数就有 10 几种,这里我们只讲解 2 种最简单的构造函数来供读者参考:

HashTable() HashTable(Int32) 第 1 种构造函数使用默认的参数来初始化 HashTable 类的新的空实例。类似于 ArrayList 对象,其容量可以根据实际的需要自动添加。 第 2 种构造函数使用指定的容量来初始化 HashTable 类的新的实例。这里我们指定的容量只是初步判断的容量,可以在后来的使用过程中根据实际需求进行修改。 下面的代码是创建 HashTable 的新实例: HashTable ht1=new HashTable(); HashTable ht2=new HashTable(15);

HashTable 的简单操作 类似于前面我们对数组的操作,我们可以对哈希表进行元素的添加、删除、查找等操作,下面具体讲解一下:

在哈希表中添加一个 key/value 键值对: HashtableObject.Add(key,value);

在哈希表中去除某个 key/value 键值对: HashtableObject.Remove(key);

从哈希表中移除所有元素: HashtableObject.Clear();

判断哈希表是否包含特定键 key : HashtableObject.Contains(key);

一个关于 HashTable 操作的例子 using System; using System.Collections; // 使用 Hashtable 时,必须引入这个命名空间 class hashtable { public static void Main() { Hashtable ht=new Hashtable(); // 创建一个 Hashtable 实例 ht.Add("E","e");// 添加 key/value 键值对 ht.Add("A","a"); ht.Add("C","c"); ht.Add("B","b"); string s=(string)ht["A"]; if(ht.Contains("E")) // 判断哈希表是否包含特定键 , 其返回值为 true或 false Console.WriteLine("the E key:exist"); ht.Remove("C");//移除一个 key/value 键值对 Console.WriteLine(ht["A"]);//此处输出 a ht.Clear();//移除所有元素 Console.WriteLine(ht["A"]); //此处将不会有任何输出 } }

遍历 HashTable

C# 中提供了 Foreach 语句以对 HashTable 进行遍历。由于 HashTable 的元素是一个键 / 值对,因此需要使用 DictionaryEntry 类型来进行遍历。 DictionaryEntry 类型在此处表示一个键 /值对的集合。 下面的代码则可以实现对 HashTable 中的元素进行遍历:foreach(DictionaryEntry de in ht) //ht 为一个 Hashtable 实例 { Console.WriteLine(de.Key);//de.Key 对应于 key/value 键值对 key Console.WriteLine(de.Value);//de.Key 对应于 key/value 键值对 value }

对 HashTable 进行排序 对哈希表进行排序在这里的定义是对 key/value 键值对中的 key 按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在 Hashtable 进行对 ke

y 进行重新排列,如果需要 Hashtable 提供某种规则的输出,可以采用一种变通的做法: ArrayList akeys=new ArrayList(ht.Keys); // 别忘了导入 System.

Collections akeys.Sort(); // 按字母顺序进行排序 for(string skey in akeys) { Console.Write(skey + ":"); Console.WriteLine(ht[skey]);//排序后输出 }

4.5 字符与字符串 C# 内置支持功能完全的 string 类型。更重要的是, C# 把字符串也当成对象,封装了所有字符串所拥有的操作、排序和搜索方法。复杂的字符串处理模式匹配要依靠正则表达式的帮助。 C# 将正则表达式语法的强大与复杂同完全的面向对象设计结合起来了。

4.5.1 字符串的声明和初始化定义字符串最基本的方式是把一个双引号括起来的字符串赋给一个 string 类型的变量:

string s = "abcdef";

字符串的声明和初始化双引号括起来的字符串可以包含转义字符,如“ \n”或“ \t” ,都以反斜线开始,用来表示换行或制表。由于反斜线本身在一些命令行语法(如 URL或者目录路径)中会用到,引号括起的字符串中,反斜线必须在其自身前面再加一个反斜线。如下面代码所示:

string directory = "C:\\text";

字符串的声明和初始化字符串也可以用原样的字符串字面值创建,以“@” 符号开头。这样 string 构造方法就知道字符串应照原样使用,即使它要跨行或者含有转义字符。在原样字符串字面值中,反斜线和字符串可以简单地看成是多余的字符。因此,上面的程序代码 string directory="C:\\ "; 也可以改写成如下的代码:

string directory = @"C:\text";

4.5.2 字符串的处理string 类型变量可以看作是 char 变量的只读数组。这样,就可以使用下面的语法访问每个字符:

string myString = "abcdef"; char myChar= myString[1]; 同时,我们还可以使用 ToCharArray() 函数,把 string 类型的变量转存到字符数组里面了。

一个 string转化为字符数组的例子 例把一个 string 变量的所有值存放到一个字符数组里面去 。 程序代码:

using System; using System.Collections.Generic; using System.Text; namespace stringExample { class Program { static void Main(string[] args) { string s = "abcdef"; char[] myChar = s.ToCharArray(); Console.WriteLine(" 字符数组 myChar 输出如下: "); foreach(char c in myChar) { Console.WriteLine("{0}",c); } Console.ReadLine(); } } }

程序运行结果

字符串的拼接字符串的串接(合并)是指使用“ +” 符号连接前后两个字符串:

string city = "南京市 "; string street = " 新街口 "; string address = city + street; Console.WriteLine(“地址是:” +address); 上述代码的输出结果为:“地址是:南京市新街口”。

String 类的方法和属性String 类有很多方法和属性,常见的有:

Length 属性、 ToUpper/ToLower 方法、IndexOf 方法、 SubString 方法等。

Length 属性介绍Length 属性是描述字符串长度的属性 string str2=”you are welcome!”;

int n=str2.Length; 那么 n 就得到 str2 字符串的长度

ToUpper/ToLower 方法介绍ToUpper() 方法是把字符串中所有的字母 都变成大写ToLower() 方法是把字符串中所有的字母 都变成小写

IndexOf 方法介绍IndexOf() 方法是从 str1 字符串找出第一次出现某子字符串的位置

string str1=”you are welcome”;int n=str1.IndexOf(“are”);

那么 n 的值为 4 ;

SubString () 方法SubString () 方法是从 str1 字符串的 n1个字符开始,长度为 n2 的子串 str1.SubString(n1,n2) ;

小结 本章主要讲了数组和字符串处理的基础知识。在 C# 中,数组是通过在类型和变量名之间放置一个空方括号来进行说明。 C

# 数组可以是一维数组、多维数组或者是交错数组。字符串的处理在本章中我们讨论了几个基本的技巧,字符串处理的方法我们在表中大多已经列出,使用字符串处理的各种方法以及多个方法的组合可以达到很好的效果。

谢谢!