第 4 章 数组与字符串
主要内容
几种数组的定义以及使用
字符串的定义以及使用
4.1 一维数组
声明一维数组的语法是在类型后放方括号 : int[] numbers;
数组在被访问之前必须 new 初始化,初始化有 2 种方式。可以由字面形式指定数组的完整内容 :int[] numbers={1 , 2 , 3 , 4 , 5} ;
也可以先直接指定数组的大小,再使用关键字 new初始化所有的数组元素。int[] numbers=new int[5]{1 , 2 , 3 , 4 , 5};
声明以及初始化数组
也可以使用已经赋值的变量来进行初始化,例如:int a=3;
int[] numbers=new int[a];
数组的下标是从 0 开始,所以上面那行所定义的数组包含以下 3 个元素: numbers[0] , numbers[1] , numbers[2] 。
一个关于数组使用的例子
例 4.1 定义一个字符串数组将几个球员的姓名输入这个数组,并且把他们逆序输出来。
程序代码( show debug)
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# 中,我们还可以定义一种交错数组,数组中的每一行可以不相同。交错数组的定义例子:
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 类包含在 System.Collections 命名空间中,要在程序的开头添加 System.Collections 命名空间,才可以建立 ArrayList对象类。
ArrayList 类的方法和属性 ArrayList 类是一种可以按需动态增长的数组。它提供了许多用于操作有用
方法和属性。
Ex4.3 do itusing System.Collections; static void Main(string[] args) { ArrayList myAL = new ArrayList(); myAL.Add("hello"); myAL.Add("World"); myAL.Add("!"); myAL.Add(123); myAL.Insert(1, 123.45); //Insert(int index, object value);
Console.WriteLine("count={0} index={1}", myAL.Count, myAL.IndexOf("hello") );
foreach(Object obj in myAL) Console.Write(" {0} ", obj);
}
4.4 HashTable ( 不讲 )
在 .NET Framework 中, HashTable 是System.Collections 命名空间提供的一个容器,用于处理和表现类似 key/value 的键值对,这些键 / 值对根据键的哈希代码进行组织。其中 key 通常可用来快速查找,同时 key 是区分大小写的; value 用于存储对应于 key 的值。
4.5 字符与字符串
C# 内置支持功能完全的 string 类型。
C# 把字符串当成对象,封装了字符串所拥有的操作、排序和搜索方法。
定义字符串的方式:把一个双引号括起来的字符串赋给一个 string 类型的变量:string s = "abcdef";
字符串的声明和初始化
双引号括起来的字符串可以包含转义字符,如“ \n” 。
由于反斜线本身在一些命令行语法(如 URL 或者目录路径)中会用到,引号括起的字符串中,反斜线必须在其自身前面再加一个反斜线。如下面代码所示: string directory = "C:\\text";
字符串的声明和初始化字符串也可以用原样的字符串字面值创建,
以“ @” 符号开头。这样 string 构造方法就知道字符串应照原样使用,即使它要跨行或者含有转义字符。在原样字符串字面值中,反斜线和字符串可以简单地看成是多余的字符。因此,上面的程序代码
string directory="C:\\ text ";
也可以改写成如下的代码: string directory = @"C:\text"; // \ 用原样的字符无@ , 则“ C:\text“ 中的 \t 是转义字符 ;
4.5.2 字符串的处理
string 类型变量可以看作是 char 变量的只读数组。这样,就可以使用下面的语法访问每个字符: string myString = "abcdef";
char myChar= myString[1];
还可以使用 ToCharArray() 函数, 把 string 类型的变量转存到字符数组。
一个 string 转化为字符数组的例子 把一个 string 变量的所有值存放到一个字符数组里面去 。
static void Main(string[] args)
{
string s = "abcdef";
char[] myChar = s.ToCharArray();
Console.WriteLine(" 数组 myChar 输出如下: ");
foreach(char c in myChar)
Console.WriteLine("{0}",c);
}
程序运行结果
字符串的拼接
字符串的串接(合并)是指使用“ +” 符号连接前后两个字符串: 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 字符串的 idx 开始位 (0 是初位 ) ,长度为 num 的子串 :
str1.SubString(idx, num) ;
string str1=”you are welcome”;string str2=str1.Substring(4, 3);
那么 str2=“are” ;
Format() 方法
double x=12.345678;
string st1=“abc”;
string st2=x.ToStirng() + “abc”;
string st=string.Format(“value={0:f3} st={1}\n”,
x, st1);
String do it, debug it string s = "abcdef“, s1 = "abc";if( s1==s ) Console.WriteLine("s1==s"); else if (s1 != s) Console.WriteLine("s1!=s");
Console.WriteLine(s1+" + " + s); s1 = s.ToUpper(); s1 = s1.ToLower();
int n=12345;s1 = n.ToString();s1 = s.Substring(2);
s1 = " " + s + " "; s1 = s1.TrimStart(); s1 = s1.TrimEnd();
小结
本章主要讲了数组和字符串处理的基础知识。在 C# 中,数组是通过在类型和变量名之间放置一个空方括号来进行说明。 C# 数组可以是一维数组、多维数组或者是交错数组。字符串的处理在本章中我们讨论了几个基本的技巧,字符串处理的方法我们在表中大多已经列出,使用字符串处理的各种方法以及多个方法的组合可以达到很好的效果。