《最新四章节数组和字符串PPT课件》由会员分享,可在线阅读,更多相关《最新四章节数组和字符串PPT课件(37页珍藏版)》请在金锄头文库上搜索。
1、四章节数组和字符串四章节数组和字符串第四章第四章 数组和字符串数组和字符串2一维数组的初始化一维数组的初始化l 在定义数组时对数组元素赋以初值。在定义数组时对数组元素赋以初值。l例如例如:int a10=0,1,2,3,4,5,6,7,8,9;l如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为0,可以写成,可以写成int a10=0,0,0,0,0,0,0,0,0,0;l不能写成不能写成 int a10=0*10;即不能给数组整体赋初值(即不能给数组整体赋初值(C+不允许对一个数组进行聚集操作不允许对一个数组进行聚集操作 )。)。l 在对全部数组元素赋初值时,可以不指定数组长度。在
2、对全部数组元素赋初值时,可以不指定数组长度。l例如例如:int a5=1,2,3,4,5;l可以写成可以写成 int a=1,2,3,4,5;l在第二种写法中,花括号中有在第二种写法中,花括号中有5个数,系统会据此自动定义个数,系统会据此自动定义a数组的数组的长度为长度为5。9例:找出一维数组中的最大数。l算法分析:算法分析:1.假设数组中第假设数组中第1个元素最大,令个元素最大,令big =array02.将将array i(0= i n)与与big进行比较,进行比较,若若array i big ,i=i+1,再执行再执行2否则,令否则,令big =array i,i=i+1,再执行再执行2
3、3.循环结束,求出最大元素并输出循环结束,求出最大元素并输出big。10/ 找出一维数组中的最大数找出一维数组中的最大数#include using namespace std; int main() int array7;coutPlease input an array with seven elements: endl;for(int i=0; iarrayi;int big = array0;for(int j=0; jbig)big = arrayj;coutmax=bigmaxaijmax14#include using namespace std; int main()int i
4、, j, row=0, colum=0, max; int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2;max=a00;for (i=0;i=2;i+)for (j=0;jmax) max=aij; row=i; colum=j;coutmax=max, row=row, colum=columname;l字符串的输出字符串的输出coutname; 194.2.2 字符串处理库函数lC/C+提供了许多字符串处理函数。使用这些函数,可提供了许多字符串处理函数。使用这些函数,可以提高字符处理的效率。以提高字符处理的效率。l字符串处理函数的说明都包含在字符串处理函数的说明都包
5、含在“cstring”头文件中头文件中,所以使用时需要添加所以使用时需要添加#include lstpcpy(): 字符串拷贝字符串拷贝;lstrcat(): 字符串连接字符串连接;lstrchr(): 在字符串中查找字符在字符串中查找字符;lstrcmp(): 字符串比较字符串比较;lstrlen(): 求字符串长度求字符串长度;lstrlwr(): 将字符串中的大写字母转换为小写字母将字符串中的大写字母转换为小写字母;lstrrev(): 反转字符串反转字符串;lstrstr(): 在字符串中查找另一个字符串在字符串中查找另一个字符串;lstrupr(): 将字符串中的小写字母转换为大写字
6、母将字符串中的小写字母转换为大写字母;l 20字符串处理函数l(1) 求字符串的长度求字符串的长度:int strlen(char s );例如例如:len = strlen(This is a sample.);执行后,变量执行后,变量len会被赋值会被赋值17。l(2) 字符串连接函数字符串连接函数 strcat(char destin , char source );l(3) 复制字符串复制字符串strcpy(char destin , char source );例如例如:char weekday11;strcpy(weekday, MONDAY);l(4) 字符串字符串比较比较int
7、 strcmp(char string1 , char string2 );21例4-2:字符串复制函数和连接函数的用法#include #include using namespace std;int main()char s80;strcpy( s, Hello world from );strcat( s, strcpy );strcat( s, and );strcat( s, strcat! );coutsendl;return 0;22例4-3:简单的口令验证系统#include #include using namespace std;int main()char pwd50;w
8、hile(1)coutpwd;if(strcmp(pwd, welcome)cout口令不正确,请重新输入!口令不正确,请重新输入!endl;elsebreak;cout口令正确,欢迎使用,再见。口令正确,欢迎使用,再见。endl;return 0;23扩展阅读l4.3 字符串类字符串类l字符串类隶属于标准字符串类隶属于标准C+语言类库,若要在程序中使语言类库,若要在程序中使用字符串类,必须在源程序最前面包含标准用字符串类,必须在源程序最前面包含标准C+语言语言类库的头文件类库的头文件。l使用与基本数据类型使用与基本数据类型int、char等类似,定义格式为:等类似,定义格式为:string
9、对象对象1, 对象对象2, ;l例如:例如: string s1, s2;/定义对象定义对象s1和和s2 string s3(Monday);/定义定义s3同时初始化同时初始化24/ 例例 4-4 字符串类的运算符操作字符串类的运算符操作#include #include using namespace std;int main()string str1(Zhang3);string str2(Li4);string str3=Wang5;string str4;/ 字符串赋值字符串赋值str4 = str1; cout str1 endl str4 endl;/ 字符串连接字符串连接str4
10、 = str2 + str3; cout str4 endl;str4 = str2 + and + str3;cout str4 = str1) cout = str1 endl;elsecout str3 str1 endl;/ 输入字符串输入字符串cout str5;cout str5 endl;return 0;运行结果:Zhang3Zhang3Li4Wang5Li4 and Wang5str3 str1请输入一个字符串: MondayMonday25上机指导l4.4 基本调试方法基本调试方法l标准数据检验标准数据检验:用若干组已知结果的标准数据对程序进行检验用若干组已知结果的标准数据
11、对程序进行检验l标准数据:要有代表性标准数据:要有代表性, 接近实际数据接近实际数据;比较简洁比较简洁, 容易对其结果的正确性进行容易对其结果的正确性进行分析;对重要的临界数据也必须进行检验。分析;对重要的临界数据也必须进行检验。 l程序跟踪程序跟踪:让程序逐句执行让程序逐句执行, 通过观察和分析执行过程中数据和流程变化来查找错误通过观察和分析执行过程中数据和流程变化来查找错误l采用跟踪调试工具采用跟踪调试工具l传统的方法:传统的方法: 在程序中直接设置断点、打印重要变量内容等来掌握程序的运在程序中直接设置断点、打印重要变量内容等来掌握程序的运行情况。行情况。l边界检查边界检查:重点检查边界和
12、特殊情况重点检查边界和特殊情况l如果程序中有由如果程序中有由if-else语句、语句、switch语句等组成的分支结构语句等组成的分支结构, 应该设计相应的数应该设计相应的数据,使得分支中的每一条路径都要通过检验据,使得分支中的每一条路径都要通过检验例如例如, while(count1000) 就应该检验就应该检验count等于等于999、1000、0 或负数等情况。或负数等情况。l简化简化:在调试时在调试时, 有时可以通过对程序进行某种简化来加快调试速度。有时可以通过对程序进行某种简化来加快调试速度。l例如减少循环次数、缩小数组规模、屏蔽次要程序段等。例如减少循环次数、缩小数组规模、屏蔽次要
13、程序段等。l 要注意简化不能太过分要注意简化不能太过分, 以致于无法代表原程序的真实情况。以致于无法代表原程序的真实情况。26应用举例l例例 4-5:使用数组方法计算斐波那挈数列问题:使用数组方法计算斐波那挈数列问题#include using namespace std;int main()int i, f24;f0=1;f1=1;/ 构造斐波那契数列构造斐波那契数列for(i=2; i24; i+)fi=fi-1+fi-2;/ 输出斐波那契数列输出斐波那契数列for(i=0; i24; i+)coutfit;coutendl;return 0;27例4-6:使用冒泡排序法编写程序,可以对任
14、意输入的10个整数进行从小到大的排序 l算法分析:算法分析:1.两两比较相邻元素两两比较相邻元素Ai和和Ai-1 (i=N-1, N-2, 2, 1, 0), 如果如果AiAi-1, 则交换它们的位置则交换它们的位置 AiAi-1; 经过经过N-1次比较次比较,将最将最小值交换到小值交换到A0的位置的位置; 2.对剩下的对剩下的N-1个元素个元素,再两两进行比再两两进行比较较,按同样规则交换它们的位置按同样规则交换它们的位置,经经过过N-2次比较次比较,将次最小值交换到将次最小值交换到A1的位置的位置;3.如法炮制如法炮制,经过经过N-1趟的趟的“冒泡处理冒泡处理”,每趟进行每趟进行N-i次的
15、比较次的比较,全部数列全部数列有序。有序。28#include using namespace std;int main()int i, j, tmp;int list10;cout 请输入待排序的整数数列:请输入待排序的整数数列:;for(i=0; ilisti;for(i=0; ii; j-)/ 每次都从最后一个元素开始比较每次都从最后一个元素开始比较if(listj-1listj)/ 如果前后顺序不符,则交如果前后顺序不符,则交换位置换位置tmp = listj-1;listj-1 = listj;listj = tmp;/ 输出排序后的数组输出排序后的数组cout 排序后的整数数列为:
16、排序后的整数数列为:;for(i=0; i10; i+)cout listi ;coutendl;return 0;29应用举例l例例 4-7:编写程序,计算两个矩阵差。:编写程序,计算两个矩阵差。30#include using namespace std;int main()const int M=3;const int N=4;double aMN=1, 2, 3, 4,5, 6, 7, 8,9, 10, 11,12;double bMN=1, 4, 7,10,2, 5, 8, 11,3, 6, 9,12;double cMN;/ 结果矩阵结果矩阵cout 矩阵矩阵a和矩阵和矩阵b的差的
17、矩阵的差的矩阵c为为: endl;/ 两个矩阵的加减是对应矩阵元素的加减两个矩阵的加减是对应矩阵元素的加减for(int i=0; iM; i=i+1)for(int j=0; jN; j=j+1)cij=aij-bij;cout cij t;cout endl;/ 每输出完成一行中所有元素后换行每输出完成一行中所有元素后换行return 0; 31应用举例l例例4-8字符串连接。字符串连接。/ 方法方法0,直接调用字符串连接函数直接调用字符串连接函数#include #include using namespace std;int main()char destination81 = abc
18、defghijklmnopqrstuvwxyz;char source = ABCDEFGHIJKLMNOPQRSTUVWXYZ;strcat(destination, source); / 直接调用字符串连接函数直接调用字符串连接函数cout连接后的字符串为:连接后的字符串为:destinationendl;return 0;32应用举例l例例4-8字符串连接。字符串连接。/ 方法方法1,利用字符数组的结构特点利用字符数组的结构特点#include #include using namespace std;int main()char destination81 = abcdefghijkl
19、mnopqrstuvwxyz;char source = ABCDEFGHIJKLMNOPQRSTUVWXYZ;int i = strlen(destination);/ 求出目标字符串长度,以确定复制位置求出目标字符串长度,以确定复制位置int j = 0;while(sourcej!=0)/ 在未达到源字符串尾部前逐个字符复制在未达到源字符串尾部前逐个字符复制destinationi+ = sourcej+;destinationi = 0;/ 在目标字符串的结尾处添加结束标志在目标字符串的结尾处添加结束标志cout连接后的字符串为:连接后的字符串为:destinationendl;ret
20、urn 0;33应用举例l例例4-9 恺撒(替换)加密法恺撒(替换)加密法l加密规则:加密规则:l将每个字母用字母表中排在其后面的第将每个字母用字母表中排在其后面的第3个字母个字母的大写形式来替换(如字母的大写形式来替换(如字母d或或D就用就用G来替换),来替换),对于字母表中最后的三个字母,可将字母表看成对于字母表中最后的三个字母,可将字母表看成是首尾衔接的(如字母是首尾衔接的(如字母y或或Y用用B来替换);字符来替换);字符串中其他非字母符号不做改变。串中其他非字母符号不做改变。l使用该方法编写一个字符串加密程序。使用该方法编写一个字符串加密程序。34/ 例例4-9:恺撒(替换)加密:恺撒(替换)加密#include #include using namespace std;int main()char str50 = I love you;cout加密前的字符串是:加密前的字符串是:str= a & stri = A & stri = Z)stri = (stri+3-A)%26+A;/ 按凯撒加密法替换字母按凯撒加密法替换字母i+;cout加密后的字符串是:加密后的字符串是:strendl;return 0;35学好程序设计语言的唯一途径是学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成你的编程能力与你在计算机上投入的时间成 结结 束束 语语36