配色: 字号:
《C#语言程序设计项目教程》第5章 字符和字符串写字字帖
2023-05-24 | 阅:  转:  |  分享 
  
第5章 字符和字符串本章导读:本章的主要内容是学习字符和字符串的用法。然后通过项目“有趣的古诗”为导向,七个任务(按行输出古诗《清明》、古
诗听写、提取古诗关键字、古诗分割成句、古诗的有趣断句、错乱古诗的拼接、变化多样的字符串)为驱动,学习有关字符和字符串的相关知识,包
括字符和字符串的声明及使用、字符串的常见操作方法等,本项目的完成使得学生能在趣味中学习字符和字符串。第5章 字符和字符串 ——
任务一 按行输出古诗《清明》 一、任务描述:创建一个控制台应用程序,按行打印出古诗《清明》:清明时节雨纷纷,路上行人欲断魂。借
问酒家何处有?牧童遥指杏花村。每行诗中的每个字用制表符隔开,效果如下图所示:二、知识准备:二、知识准备:1、Char类Char在C
#中表示一个Unicode字符,多个Unicode字符构成字符串。Unicode字符是目前计算机中通用的字符编码,对不同语言中的每
个字符设定了统一的二进制编码,用于满足跨语言、跨平台的文本转换、处理的要求。char类的定义如下:
char ch1=’A’; char ch2=’2’;字符常量用单引号括
起二、知识准备:Char类为开发人员提供了多种方法来操控字符。常用方法及说明如表所示,还有一些方法没有全部列举,需要时请查阅相关资
料。Char类的常用方法及说明三、任务分析:1、分析按行输出古诗需要的变量如表所示:变量声明说明表2、可以使用foreach语句对
诗词的每一个字进行循环访问。3、分行显示可以通过IsPunctuation方法判断当前字符为标点符号类型时输出换行符实现。4、制表
符使用转义字符“\t”表示。四、任务实施:1、创建一个名为Poem的控制台应用程序。2、在main函数中定义变量Poem用于存放古
诗:string poem = "清明时节雨纷纷,路上行人欲断魂。借问酒家何处有?牧童遥指杏花村。";3、添加代码对古诗按行输出,
每个字中间用制表符“\t“分隔:三、任务实施: foreach (char item in poem)
{ Console.Write(item); Console.
Write("\t"); if (Char.IsPunctuation(item))
Console.Write("\n"); }4、运行程序。1、foreach语句通常
用于对字符的逐个访问,一个中文字也是一个字符。2、Char类的常见方法返回值为true或者false。四、任务小结:第5章 字符
和字符串 ——任务二 古诗听写 一、任务描述:在任务一中我们学习了一首中国古诗《清明》,在本任务中,希望同学们能够默写该古诗
。创建一个控制台应用程序,逐行输入古诗,如果正确,则提示通过;若错误,则显示正确古诗。运行效果如下图所示:1二、知识准备:比较字符
串二、知识准备:1、比较字符串在C#中比较字符串通常有Compare、CompareTo和Equals这三种方法,这三种方法都属于
String类。二、知识准备:1、比较字符串(1) Compare方法Compare方法用于比较两个字符串是否相等,有很多种重载方
法,下面列出最常用的两种:int Compare(stirng A,string B)int Compare(stirng A
,string B,bool ignorCase)二、知识准备:参数说明参照表所示:Compare方法参数及说明Compare方法
会返回一个整型值,为0表示两个字符串相等,为1表示A比B大,为-1表示A比B小。二、知识准备:(2) CompareTo方法Com
pareTo方法与Compare方法含义类似,不同的是CompareTo方法是以实例本身与指定字符串做比较。语法:public i
nt CompareTo(string B);二、知识准备:(3) Equals方法Equals方法用于比较两个字符串是否相同,如
果相同返回true,不同返回false,有以下两种常用方法。假设有两个待比较字符串string a,b;<1>实例方法。语法:pu
blic bool Equals(string value)用实例方法比较字符串a和b:a. Equals(b);二、知识准备:<
2>静态方法。语法:public static bool Equals(string A,string B)用静态方法比较字符串a
和b: Equals(a,b);三、任务分析:1、分析古诗听写任务需要以下变量,如表所示:变量声明说明表2、因为对古诗的听写是按行
判断,所有需要将整个古诗存放在一个字符串数组里,以方便按行比较。string[] poem;数组的定义将在第5章中详细讲解,此处只
需要同学们理解即可。四、任务实施:1.创建1个名为“PoemEqual”的控制台应用程序。2.变量定义:String senten
ce = "";//利用字符串数组存放古诗string[] poem = new string[] { "清明时节雨纷纷","路上
行人欲断魂","借问酒家何处有","牧童遥指杏花村" };四、任务实施:3.添加如下代码完成诗词按行默写:for (int i =
0; i < poem.Length; i ++) { Console.Wr
iteLine("请默写第{0}句古诗:\n",i+1); sentence = Console.R
eadLine(); if (sentence.Equals(poem[i]))
Console.WriteLine("第{0}句默写正确!\n", i + 1);
else Console.WriteLine("第{0}句默写错误!正确诗句为:{1}。\n", i + 1,p
oem[i]); }五、任务小结:1、任务中的if (sentence.Equals(poem[i]))可以
修改if (string.Compare(sentence, poem[i]) == 0)。第5章 字符和字符串 ——任
务三 提取古诗关键字 一、任务描述:创建一个控制台应用程序,提取古诗指定关键字。输入所要提取关键字所在第几句,起始位置和关键字长
度,运行程序,显示出指定关键字。程序运行效果图如下图所示:二、任务准备:1、截取字符串 String类提供了一个Substring
方法可以截取字符串中指定位置开始指定长度的子字符串。语法格式为:string Substring(int start, int l
ength)从一个字符串中start位置开始取长度为length的一个子串,如果省略length,表示子串从字符串中start位置
开始直到最后一个字符。二、任务准备:例:分别从字符串“Hello World!”中取子串“Hello”和“World!”。stri
ng strHello = "Hello World!";string strH = strHello.Substring(0,5
); //从字符串变量strHello的第1个字符开始取5个字符string strW = strHello.Substring(
6);//从变量strHello中取出从第7个字符开始的所有字符二、任务准备:例1:判断一个整数是否为水仙花数。(利用SubStr
ing方法)static void Main(string[] args) { Console
.Write("请输入要判断的一个整数:"); string strdata = Console.ReadL
ine(); int sum = 0; for (int i = 0; i < str
data.Length; i++) { int id = Convert.To
Int32(strdata.Substring(i, 1)); sum += id ^ 3;
}二、任务准备: if (sum == Convert.ToInt32(strdata))
{ Console.WriteLine("{0}是水仙花数", strdata);
} else { Console.WriteLin
e("{0}不是水仙花数。", strdata); } Console.Write("
按任意键退出......"); Console.ReadKey(true ); }二
、任务准备:2、字符串的转义字符@在接受字符串的时候介绍了转义字符“\”。例如:需要字符串用来表示test.txt文件的路径时,可
以做如下定义:string path=”D:\\temp1\\temp2\\test.txt”;但是,如果需要定义有很多转义字符的
字符串时,这样做会显得非常麻烦,而且容易出错。实际上,.NET提供了一个很好用的运算符“@”来简化字符串的转义字符。二、任务准备:
以@开头用双引号引起来的这种定义方式优点在于换码序列“不”被处理。如果需要用@引起来的字符串中包含一个双引号,可以使用两对双引号的
方法,如下所示:string path=@”D:\temp1\temp2\test.txt”;上面的文件路径可以做如下定义,与上面
的定义等价:此时,字符串str的值为“Hello”World!。string str=@”””Hello””World!”;三、任
务分析:1、本任务需要以下变量,如表所示变量声明说明表2、在程序设计中,位置的编号都是从0开始,例如line=3,用户意指第3行,
实则在字符串数组poem是编号为2的行(3-1)。四、任务实施:1.建立一个名为“PoemSunstring”的控制台应用程序。2
.定义变量如下:int line=0;int start = 0;int length = 0;string[] poem = n
ew string[] { "清明时节雨纷纷", "路上行人欲断魂", "借问酒家何处有", "牧童遥指杏花村" };四、任务实施
:3.输出古诗词。利用foreach语句输出字符数组Poem里面的古诗词:foreach (string sentence in
poem) { Console.WriteLine(sentence);
}四、任务实施:4.输入关键字所在行号、起始位置和长度。 Console.Write("请
输入需要提取的词语所在句子:"); line = int.Parse(Console.ReadLine())
- 1; Console.Write("请输入需要提取的词语起始位置:"); sta
rt = int.Parse(Console.ReadLine())-1 ; Console.Write("
请输入需要提取的词语的长度:"); length = int.Parse(Console.ReadLine(
));四、任务实施:5.提取关键字,并输出。关键字的提取,实际上是对指定的诗句进行字符串的截取。 Conso
le.WriteLine("提取的关键字为:"+poem[line].Substring(start,length));6.运行程
序。五、任务小结:1、截取子字符串的方法Substring语法格式为:string Substring(int start, in
t length) 从一个字符串中start位置开始取长度为length的一个子串,如果省略length,表示子串从
字符串中start位置开始直到最后一个字符。在应用此方法时,要注意start和length的值的计算。2、学会灵巧应用LastIn
dexOf方法计算length的值。第5章 字符和字符串 ——任务四 古诗分割成句 一、任务描述:将古诗《清明》从标点符号处
分隔成诗句。程序运行效果如下图所示:二、任务准备:1、分割字符串String类提供了一个Split方法,可以将字符串按照指定的分隔
符分割。语法:public string [] Split(params char[] separator)separator是
一个数组,包含分隔符。三、任务分析:1、分析统计古诗分隔需要以下变量,如表所示:变量声明说明表四、任务实施:1.建立1个名为“Po
emSplit”的控制台应用程序。2.定义变量如下:string poem="清明时节雨纷纷,路上行人欲断魂。借问酒家何处有?牧童
遥指杏花村。" ;//利用Split方法按照指定符号分隔诗词string[] inputs = poem.Split('','', ''
。'', ''?'', ''。'');四、任务实施:3.诗词的整句输出:Console.WriteLine("《清明》 杜牧"); Cons
ole.WriteLine("整首输出:" + poem);四、任务实施:4.利用foreach语句对诗词进行分割成句:
Console.WriteLine("《清明》 杜牧"); Console.WriteLine
("整首输出:" + poem); Console.WriteLine("分割成句:");
foreach (string item in inputs) { Co
nsole.Write(item); }五、任务小结:1、代码可以替换为string[] inputs =
poem.Split(new char[]{'','', ''。'', ''?'', ''。''}, StringSplitOptions.Rem
oveEmptyEntries);,第二个参数表示移除分隔后最后的空白字符串。第5章 字符和字符串 ——任务五 古诗的有趣断句
一、任务描述:有一首诗:“清明时节雨纷纷,路上行人欲断魂。借问酒家何处有?牧童遥指杏花村”。向其中插入标点符号,变成另外一句意
境:“清明时节雨,纷纷路上行人,欲断魂。借问酒家,何处有牧童,遥指杏花村。” 。创建一个C#控制台应用程序,实现古诗的重新断句,效
果如下图所示:二、任务准备:1、插入和填充字符串(1)插入字符串String类提供了一个Insert方法,用于向字符串的任意指定位
置插入字符串。语法:public string Insert(int startIndex,string value);Inse
rt方法参数及说明二、任务准备:(2)填充字符串 String类提供了PadLeft和PadRight方法,用于向
字符串的左侧或右侧进行字符填充。语法:public string PadLeft (int totalsWidth,char pa
ddingChar);public string PadRight (int totalsWidth,char paddingCh
ar);PadLeft和PadRight方法参数及说明1、插入和填充字符串二、任务准备:2、删除字符串public string
Remove(int startIndex);String类提供了一个Remove方法,用于从字符串的指定位置开始,删除指定个数的
字符。它有两种重载方法。(1)删除字符串中指定位置开始到最后的所有字符。语法如下:二、任务准备:(2)删除从字符串指定位置开始指定
个数的字符。语法如下:public string Remove(int startIndex,int count);Remove方
法参数及说明三、任务分析:1、分析对古诗进行插入和删除字符需要以下变量,如表所示:变量声明说明表四、任务实施:1.启动Visual
Studio 2010,建立名为“InterestPoem”的控制台应用程序。2.打开“Program.cs”代码文件,输入以下
代码:static void Main(string[] args) { string str
= "清明时节雨纷纷 路上行人欲断魂 借问酒家何处有 牧童遥指杏花村"; Console.WriteLine
("原字符串为:{0}",str); str = str.Insert(5,",");
str = str.Insert(13, ","); str = str.Insert(17, "。");
str = str.Insert(23, ","); str = str.Inser
t(30, "?"); str = str.Insert(36, "。"); Cons
ole.WriteLine("添加标点符号后:{0}", str); Console.ReadLine();
}四、任务实施:运行结果如图所示:四、任务实施:3.如图5-6所示可以看到添加字符后的诗句里有很多多余的空格,通
过Remove来删除这些字符,变成一首工整的诗句,运行结果如上图所示,修改代码如下:static void Main(string
[] args) { string str = "清明时节雨纷纷 路上行人欲断魂 借问酒家何处有
牧童遥指杏花村"; Console.WriteLine("原字符串为:{0}",str);
//添加字符 str = str.Insert(5,","); str = st
r.Insert(13, ","); str = str.Insert(17, "。");
str = str.Insert(23, ",");四、任务实施: str = str.Insert(3
0, "?"); str = str.Insert(36, "。"); Console
.WriteLine("添加标点符号后:{0}", str); //删除字符 str =
str.Remove(8,1) ; str = str.Remove(17,1);
str = str.Remove(25, 1); Console.WriteLine("删除空格符号后:{0
}", str); Console.ReadLine();五、任务小结:1、在给字符串添加字符时要注意,添加
1个字符过后字符串的长度会增加1。2、在给字符串删除1个字符过后字符串的长度会减少1。第5章 字符和字符串 ——任务六 错乱古
诗的拼接 一、任务描述:一个字符串string类对象被赋值后,其内容的更改就显得不太灵活。StringBuilder类是可变字符
串类,此类表示值为可变字符序列的对象。创建1个StringBuilder对象,使用StringBuilder类的Append、Ap
pendFormat、Insert、Remove和Replace方法,组织并输出古诗《清明》,运行如下图所示:二、任务准备:1、S
tringBuilder类的定义public StringBuilder(string value,int cap)StringB
uilder构造方法参数及说明StringBuilder类有6种不同的构造方法,这里只介绍最常用的一种。语法格式如下:二、任务准备
:2、 StringBuilder类的使用StringBuilder操作字符串的常见方法要使用StringBuilder类,必须引
用Syatem.Text命名空间。下面列出StringBuilder类几个操作字符串的常见方法:三、任务分析:在初始信息录入过后,
情况的变更经常会要求我们对信息进行修改,StringBuilder提供一些很好的方法,在需要对大量字符串进行拼接时,大大提高了程序
的效率。四、任务实施:1.创建1个名为PoemStringBuilder的控制台应用程序。2.打开“Program.cs”代码文件
,输入以下代码:static void Main(string[] args) { String
Builder Strb = new StringBuilder("《清明》\n");//实例化StringBuilder对象
Strb.Append("唐.杜甫\n");//追加作者 Strb.Append("借问
酒家何处有?\n牧童遥指杏花村。\n");//追加诗词后两句 Strb.Insert(9, "\n清明时节雨纷纷,\
n路上行人欲断魂。");//在位置9插入诗词前两句 Strb.Replace("杜甫", "杜牧");//将
作者名字替换成”杜牧” Console.WriteLine(Strb); Consol
e.ReadLine(); }五、任务小结:1、要注意StringBuilder类个方法的参数及使用。2、由于Str
ing类型中所存放的是只读的Char数组,因此,在使用“+”对字符串进行拼接时,系统会在内存中重新分配内存来存放拼接后的字符串,在
时间和空间上会造成很大的浪费。第5章 字符和字符串 ——任务七 变化多样的字符串 一、任务描述:生活中的字符串有多种多样的形
式,例如: “$2.000”、“1.20E+001”、“10”都是一个字符串,但是它们又各自有自己的意义。比如:“$2.000”表
示的是货币,“1.20E+001”表示的是科学计数法,“10”表示字符串10,同时有时候它也是数值10。本任务中,我们就来认识字符
串表现形式的多样化。二、任务准备:1、格式化字符串通过前面的知识大家已经知道,为了显示给定变量的值,往往要用到ToString()
方法,但如果用户要用不同的格式来显示变量的值,这时就要将字符串进行格式化,然后再显示。Format(string format,o
bject orgs);可以将任何数值、日期时间、枚举等类型的数据表示为字符串,并将该字符串按照规定的格式显示出来。二、任务准备:
Format指定要使用的格式字符串,其格式为“{占位符:格式说明符宽度}”,在.NETFramework中规定的格式说明符见下表。
格式化字符串格式说明二、任务准备:2、字符串与其他数据类型的转换(1)字符串与数字类型的转换1)使用Convert将字符串转换成数
字Convert.To数据类型(字符串)注意:将数字字符串转换为指定的数字类型,但字符串一定是数字字符串。二、任务准备:2)使用P
arse将字符串转换成数字数字类型.Parse(字符串)用于将数字字符串转换为指定的数字类型,但字符串一定是数字字符串。3)使用T
ryParse将字符串转换成数字数字类型.TryParse(字符串)这个方法用于将数字字符串转换为数字,并返回一个布尔值,以表明转
换是否成功,从而可以免去添加异常处理代码的麻烦。二、任务准备:2、字符串与其他数据类型的转换(2)字符串与时间类型的转换1)使用P
arse将字符串转换成日期时间类型DateTime.Parse(字符串)2)使用Convert将字符串转换成日期时间类型Conve
rt.ToDateTime(字符串)同样要求字符串必须是合法的能够转换成日期时间类型的字符串。三、任务分析:1、在实际操作中,根据
情况合理选择字符串的转换形式。四、任务实施:1.建立1个的控制台应用程序。2.打开“Program.cs”代码文件,将数字字符串1
0转换成整型的数字10,输入以下代码:static void Main(string[] args){ int ip =
Convert.ToInt32 ("10"); Console.WriteLine(ip); Console
.ReadLine (); }四、任务实施:3.将字符串10转换成短整型: static void Main(string[] a
rgs){ short shresult; bool blOk = Int16.TryParse("10",
out shresult); if (blOk) { Console.WriteLine
(shresult); } else { Console.WriteLin
e ("转换失败,请检查字符串!"); } Console.Read();}四、任务实施:4.将日期时间字
符串转换成日期时间类型: static void Main(string[] args){ DateTime dtTod
ay = DateTime.Parse("2010-5-1 10:21:30" ); Console.WriteLine
(dtToday ); Console.ReadLine (); }四、任务实施:这段代码将字符串“2010-5-1
10:21:30”转换成日期时间类型,赋值给变量dtToday,运行程序时,显示结果如下图所示。四、任务实施:5.使用Convert将字符串转换成日期时间类型 static void Main(string[] args){ DateTime dtToday = Convert.ToDateTime ("2010-5-10 10:21:30" ); Console.Write(dtToday ); Console.Read();}五、任务小结:1、如果待转换的字符串不是数字字符串,则无法进行数据类型的转换,如:static void Main(string[] args){ short shp = Int16.Parse("abc"); Console.Write(shp); Console.Read(); } 如果运行程序时,将显示下列错误信息:Input string was not in a correct format.意思是说,输入的字符串格式不正确。五、任务小结:2、如果将字符串“2010-5-1 10:21:30”修改成“2010-5-100 10:21:30”,如下面的代码所示:static void Main(string[] args){ DateTime dtToday = DateTime.Parse("2010-5-100 10:21:30" ); Console.Write(dtToday ); Console.Read(); } 五、任务小结:这段代码希望得到2010年5月100日这样的日期,大家知道5月最多只有31日,所以这个字符串是没法转换成一个日期时间类型的,所以在运行程序时出现下面的错误信息:String was not recognized as a valid DateTime.意思是字符串不是一个合法的日期时间字符串。谢谢观看
献花(0)
+1
(本文系小磊老师首藏)