《算法设计与分析》实验报告-1-1、实验目的(1)掌握字符串的存储方法;(2)掌握英文句子按单词和标点符号分割的方法;(3)掌握算术表达式按运算对象和运算符(只涉及+、-、*、/)分割的方法。2、实验内容(1)输入英文句子,如Thisisastring存入数组:0123Thisisastring\0则运行程序后分割如下:0This\01is\02a\03string\0(2)输入算术表达式,如:2*3+6/3.存入数组。则运行程序后分割如下:3、实验要求(1)用C(C++)语言完成算法设计和程序设计。(2)上机调试通过实验程序。(3)分别输入英语句子和算术表达式记录程序运行的结果。(4)给出具体的算法分析,包括时间复杂度和空间复杂度等。(5)撰写实验报告(把输入实验数据及运行结果用抓图的形式粘贴到实验报告上)。4、实验步骤与源程序⑴实验步骤先从具体的问题中抽象出适当的数学模型,然后设计出相应的算法,其中,需要设计一个主函数来实现菜单的输出,设计另外几个函数来求分别实现空格分割字符串,判断+、-、*、/、.,分割字符串直到结束,列菜单等,最后,串接函数,并调试程序,在调试的时候,我先进行英文句子的02\01*\023\03+\046\05/\063\07.\0《算法设计与分析》实验报告-2-输入,实现单词和标点符号的分割,再进行算术表达式的输入,实现实现运算对象和运算符的分割,多次调试后,发现没有问题,得出实验结果,并截图。⑵源代码#includestdio.h#includestdlib.h#includestring.hvoidsplit1()//空格分割法{chars[1000];charline[255][255];printf(请输入一组字符串:);gets(s);inti=0,n=0,k;do{k=0;while(s[n]=='')n++;for(;s[n]!='\0'&&s[n]!=''&&s[n]!='\n';n++,k++)line[i][k]=s[n];line[i][k]='\0';i++;}while(s[n]!='\0');printf(分割后的字符串数组:\n);intj;for(j=0;ji;j++)//输出字符串数组puts(line[j]);system(pause);}intoperators(charop){switch(op){case'+':《算法设计与分析》实验报告-3-case'-':case'*':case'/':case'=':case'.':return1;//是运算符default:return0;//不是运算符}}inttoken(char*str1,char*str2,intpos){inti,j;i=pos;//从分割位置开始while(str1[i]=='')//跳过空字符i++;if(str1[i]!='\0')//不是字符串结束{j=0;//找下一个空格符while(str1[i]!='\0'&&str1[i]!=''){str2[j]=str1[i];//拷贝非空格符if(operators(str1[i]))//是不是运算符if(j0)//不是返回之前的字符串{str2[j]='\0';returni;}else//是返回运算符{str2[j+1]='\0';returni+1;}《算法设计与分析》实验报告-4-i++;j++;}str2[j]='\0';//分割字符串结束字符returni;//返回目前位置}elsereturn-1;//分割结束}voidsplit2()//多分隔符分割法{charstring[255];//字符串数组声明chartoken_string[255];//分割字符串声明intpos;//分割位置printf(请输入一组字符串或算术表达式:);gets(string);//读取字符串pos=0;//设置分割位置初值printf(经过字符串分割后:\n);while((pos=token(string,token_string,pos))!=-1)//分割字符串直到字符串结束printf(%s\n,token_string);//输出各分割字符串system(pause);}intsel;voidselect()//菜单{system(cls);//清屏printf(\n);printf(\t字符串分割程序\n);printf(\t*****************************************\n);printf(\t*1.分割字符串分割*\n);《算法设计与分析》实验报告-5-printf(\t*2.算术表达式分割*\n);printf(\t*3.退出*\n);printf(\t*****************************************\n);printf(\t请选择(1-3):);scanf(%d,&sel);getchar();}voidmain(){for(;;){select();switch(sel){case1:split1();break;case2:split2();break;case3:exit(0);break;default:printf(选项不存在,请重新选择!\n);system(pause);}}}5、测试数据与实验结果(可以抓图粘贴)(1)菜单显示:《算法设计与分析》实验报告-1-(2)字符串分割:(3)算术表达式分割:《算法设计与分析》实验报告-1-6、结果分析与实验体会本次实验是参考了范例程序,经过自己的改写,从而实现要求。先做简单的输出,一步步的再做其它格式的设置。其中,范例程序中用到了“system(pause);”和“system(cls);”语句,实现提示继续操作与清屏,尤其是在清屏的时候,我觉得非常好用,往常稍大的程序需要反复循环操作和调试,界面看起来就非常的繁琐,有了这条语句,就可以轻松实现操作界面的整洁化了。还有,字符串的输入,注意gets和scanf的区别,在实验的过程中,我加深了对字符串各种操作的理解,觉得串这种数据结构在处理非数值的对象时,可以发挥非常重要的作用,熟练掌握串分割处理的算法,很有必要。不过,我在调试的过程中发现了程序中存在一些问题,比如说,在字符串分割的时候,只可以识别“.”,而无法识别“,”;在算数表达式分割的时候,若输入的是小数,则不会以整体输出,而会被分割,所以,这些都是本程序需要改进的地方。