字符串处理系统课程设计

来源:证券从业 发布时间:2021-04-29 点击:

课程设计(论文)任务书 软件  学  院  软件+交通运输  专  业   班  一、课程设计(论文)题目 字符处理系统 
二、课程设计(论文)工作自 2012 年 6 月 4日起至 2012 年 6 月 10日止。

三、课程设计(论文) 地点: 创新大楼 目录 一 课题描述 1 二 设计目的与要求 1 三 总体设计 2 四 详细设计 3 4.1字符串赋值函数-----------------------------------------------------------------------------------------------3 4.2求取字符串长度函数-----------------------------------------------------------------------------------------4 4.3字符串复制函数-----------------------------------------------------------------------------------------------5 4.4字符串大小比较-----------------------------------------------------------------------------------------------6 4.5字符串查找-----------------------------------------------------------------------------------------------------7 4.6字符串插入-----------------------------------------------------------------------------------------------------7 4.7字符串删除----------------------------------------------------------------------------------------------------10 五 程序编码 12 六 程序调试与测试结果 17 七 总结 19 参考文献 19 一 课题描述 本次课程设计采用C++语言编写一个字符串处理函数系统,该系统具有将给出任意的两个字符串,求出其字符串的长度,实现字符串的拷贝、连接、比较的功能;
同时具有实现将给定字符串1(主串)字符串2(子串),查找子串在主串中的位置;
给定字符串,输入所要插入的字符串(字符)及插入的位置,实现字符串(字符)的插入的功能;
对于给定的字符串,实现删除特定某个字符的功能。

二 设计目的与要求 1、 设计目的 (1)
熟练掌握C++语言的基本知识和技能。

(2)
掌握面向对象程序设计的基本思路和方法;

(3)
了解指针、类的继承、文件的打开和保存、链表应用;

(4)
利用所学的基本知识和技能,解决面向对象程序设计问题 (5)
培养分析、解决问题的能力;
提高学生的科技论文写作能力。

2、 设计要求 运用C++语言描述数据类、字符串类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动一手编程能力。要求设计其有继承与派生以及多态性的类.理解面向对象程序设计的核心的概念。

(1)
建立数据类、字符串类;

(2)
数据、字符串信息的初始化;

(3)
字符串信息的输出;

(4)
获得字符串长度;

(5)
在字符串中查找一个字符;

(6)
在字符串中查找另外一个字符串;

(7)
比较字符串;

(8)
字符串插入与删除;

三、总体设计 定义一个String类,实现对字符串类的赋值、连接、复制、查找、交换等操作。先设计一个总类然后写出多个子类来实现任务所给定的功能。

四、详细设计 4.1字符串赋值函数:
1)字符串赋值函数及输出算法如下:
cout<<“输入字符串1(长度小于200个字符):“<<endl; cin>>s1; cout<<“输入字符串2(长度小于200个字符):“<<endl; cin>>s2; cout<<“字符串1为:“<<s1<<endl; cout<<“字符串2为:“<<s2<<endl; 2)
字符串赋值函数流 程图如图4.1所示:
图4.1 字符串初始化赋初值 4.2求取字符串长度函数 1)字符串长度函数算法如下所示:
int i=0;int j=0;char *p1=s1;char *p2=s2; cout<<“字符串1的长度:“<<endl; while(*p1++!='\0')++i;//直到碰到\0时,i不在+1 cout<<i<<endl; while(*p2++!='\0')//直到碰到\0时,j不在+1 ++j; cout<<“字符串2的长度:“<<endl; cout<<j<<endl; 2)求字符串长度流程图如图4.2所示:
4.3字符串复制函数 1)字符串复制函数算法如下:
char *p1=s1; char *p2=s2; cout<<“输出复制后的字符串:“<<endl; while(*p2!='\0'){ *p1=*p2; p1++; p2++;} *p1='\0'; cout<<s1<<endl;} 2)字符串复制函数流程图如图4.3所示:
4.4字符串比较大小:
1)
字符串连接函数算法如下:
char *p1=s1;char *p2=s2; cout<<“输入字符串1(长度小于200个字符):“<<endl; cin>>s1; cout<<“输入字符串2(长度小于200个字符):“<<endl; cin>>s2; cout<<“输出两个字符串大小的比较结果:“<<endl; for(;*p1!='\0'||*p2!='\0';++p1,++p2) //从第一个字母比较,指针不断下移,一直到能判断出大小为止 {if((*p1-*p2)<0) {cout<<“字符串1小于字符串2“<<endl;break;} else if((*p1-*p2)>0) {cout<<“字符串1大于于字符串2“<<endl;break;} } if(*p1=='\0'&&*p2=='\0') cout<<“两个字符串大小相等!“<<endl; 2)字符串比较大小函数流程图如图4.4所示:
4.5字符串查找 1)
字符串查找函数算法如下:
char a1[512] = {'\0'};char a2[512] = {'\0'}; int i=0;int j=0; cout << “请输入字符串: “;cin >>a1;//a1为原字符串 cout << “请输入要查找的字符串: “;cin >>a2;//a2为要查找的 for(i=0;i<(strlen(a1)-strlen(a2)+1);i++) { for(j = 0; j < strlen(a2); j++) { if(a2[j]!=a1[i+j]) { break; } } if(j == strlen(a2)) { cout << “位置为:“<<i+1<< endl; return 0; } } cout << “不存在“ << endl; return 0; } 4.6字符串插入 1) 字符串插入函数算法如下:
int i;char s3[100];char s4[100]; char *p1=s1;char *p3=s3;char *p4=s4; //s1为原字符串,s3为要插入的字符串 cout<<“输入字符串(长度小于200个字符):“<<endl; cin>>s1; cout<<“输入所要插入的字符串:“<<endl; cin>>s3; cout<<“输入所要插入的位置:“<<endl; cin>>i; for(p1=&s1[i];(*p1)!='\0';++p1,++p4){ *p4=*p1;//将字符串1赋给4 } *p4='\0'; for(p1=&s1[i];(*p3)!='\0';++p1,++p3){ *p1=*p3;} *p1='\0'; while(*p1!='\0') ++p1; for(p4=s4;(*p4)!='\0';++p4,++p1){ *p1=*p4;} *p1='\0'; cout<<“输出插入字符串后的新字符串:“<<endl; cout<<s1<<endl; 2) 字符串插入函数流程图如图4.6所示:
开始 int i;char s3[100];char s4[100]; char *p3=s3;char *p4=s4;char *p1=s1; cout<<“输入所要插入的字符串“<<endl;cin>>s3; cout<<“输入所要插入的位置:“<<endl;cin>>i; p1=&s1[i] (*p1)!='\0' *p4=*p1; ++p1,++p4 *p4='\0'; p1=&s1[i] ((*p3)!='\0' *p1=*p3;; ++p1,++p3 *p1='\0'; N N Y Y A *p1!='\0 ++p1; p4=s4 (*p4)!='\0' *p1=*p4; ++p4,++p1 *p1='\0'; cout<<“输出插入字符串后的新字符串:“<<endl;cout<<s1<<endl; 结束 N N Y Y B 图4.6字符串插入 4.7字符串删除 1) 字符串插入函数算法如下:
char a[200]; int i; cout<<“请输入一个字符或字符串:“; cin>>a; cout<<“请输入你要删除的字符的位置:“; cin>>i;//i不能超过字符串的长度 if(i>200) cout<<“输出错误!“<<endl; else { for(int j=i;j<200;++j) { a[j-1]=a[j]; } cout<<“删除后的字符串为:“<<a<<endl; } 2) 字符串删除函数流程图如图4.7所示:
图4.7字符串插入 5 程序编码 #include<iostream> #include <string> using namespace std; int menu_select(); class String { private: char s1[200]; //定义长度为200的一维字符数组 char s2[200]; public: void Enter(); //输入输出字符串 void GetLength();//求取字符串的长度 void Strcpy(); //复制字符串 void Strcmp(); //比较字符串的大小 int Strfind(); //查找字符串 void Strinsert(); //插入字符串 void Strdel(); //字符删除 }; void String::Enter() //输入字符串 { cout<<“输入字符串1(长度小于200个字符):“<<endl; cin>>s1; cout<<“输入字符串2(长度小于200个字符):“<<endl; cin>>s2; cout<<“字符串1为:“<<s1<<endl; cout<<“字符串2为:“<<s2<<endl; } void String::GetLength() //求取字符串的长度 { int i=0; int j=0; char *p1=s1; char *p2=s2; cout<<“字符串1的长度:“<<endl; while(*p1++!='\0')//直到碰到\0时,i不在+1 ++i; cout<<i<<endl; while(*p2++!='\0')//直到碰到\0时,j不在+1 ++j; cout<<“字符串2的长度:“<<endl; cout<<j<<endl; } void String::Strcpy() //字符串复制 { char *p1=s1; char *p2=s2; cout<<“输出复制后的字符串:“<<endl; while(*p2!='\0'){ *p1=*p2; p1++; p2++; } *p1='\0'; cout<<s1<<endl; } void String::Strcmp() //比较字符串大小 { cout<<“输入字符串1(长度小于200个字符):“<<endl; cin>>s1; cout<<“输入字符串2(长度小于200个字符):“<<endl; cin>>s2;char *p1=s1; char *p2=s2; cout<<“输出两个字符串大小的比较结果:“<<endl; for(;*p1!='\0'||*p2!='\0';++p1,++p2) //从第一个字母比较,指针不断下移,一直到能判断出大小为止 { if((*p1-*p2)<0){ cout<<“字符串1小于字符串2“<<endl; break;} else if((*p1-*p2)>0){ cout<<“字符串1大于于字符串2“<<endl; break;} } if(*p1=='\0'&&*p2=='\0') cout<<“两个字符串大小相等!“<<endl; } int String::Strfind() //字符串查找 { char a1[512] = {'\0'}; char a2[512] = {'\0'}; int i=0; int j=0; cout << “请输入字符串: “; cin >>a1;//a1为原字符串 cout << “请输入要查找的字符串: “; cin >>a2;//a2为要查找的字符串 for(i=0;i<(strlen(a1)-strlen(a2)+1);i++) { for(j = 0; j < strlen(a2); j++) { if(a2[j]!=a1[i+j]) { break; } } if(j == strlen(a2)) { cout << “位置为:“<<i+1<< endl; return 0; } } cout << “不存在“ << endl; return 0; } void String::Strinsert() //字符串插入 { int i; char s3[100]; char s4[100]; char *p3=s3; char *p4=s4; char *p1=s1; //s1为原字符串,s3为要插入的字符串 cout<<“输入字符串(长度小于200个字符):“<<endl; cin>>s1; cout<<“输入所要插入的字符串:“<<endl; cin>>s3; cout<<“输入所要插入的位置:“<<endl; cin>>i; for(p1=&s1[i];(*p1)!='\0';++p1,++p4){ *p4=*p1; }//将字符串1赋给4 *p4='\0'; for(p1=&s1[i];(*p3)!='\0';++p1,++p3){ *p1=*p3; } *p1='\0'; while(*p1!='\0') ++p1; for(p4=s4;(*p4)!='\0';++p4,++p1){ *p1=*p4; } *p1='\0'; cout<<“输出插入字符串后的新字符串:“<<endl; cout<<s1<<endl; } void String::Strdel() //字符串删除 { char a[200]; int i; cout<<“请输入一个字符或字符串:“; cin>>a; cout<<“请输入你要删除的字符的位置:“; cin>>i; if(i>200) cout<<“输出错误!“<<endl; else { for(int j=i;j<200;++j) { a[j-1]=a[j]; } cout<<“删除后的字符串为:“<<a<<endl; } } int main() { char choice; String maillist; for(;;){ choice=menu_select(); switch(choice) { case 1:maillist.Enter();break; case 2:maillist.GetLength();break; case 3:maillist.Strcpy();break; case 4:maillist.Strcmp();break; case 5:maillist.Strfind();break; case 6:maillist.Strinsert();break; case 7:maillist.Strdel();break; case 8:exit(0); } } return 0; } int menu_select() { char c; cout<<“※※※※※※※※※※※※※※\n“; cout<<“※ 字符串处理函数系统 ※\n“; cout<<“※ ※\n“; cout<<“※ 1.输入字符串 ※\n“; cout<<“※ 2.求字符串长度 ※\n“; cout<<“※ 3.复制字符串 ※\n“; cout<<“※ 4.比较字符串 ※\n“; cout<<“※ 5.查找字符串 ※\n“; cout<<“※ 6.插入字符串 ※\n“; cout<<“※ 7.删除字符串 ※\n“; cout<<“※ 8.退出 ※\n“; cout<<“※※※※※※※※※※※※※※\n“; cout<<“※※※谢谢使用本系统※※※※\n“; cout<<“※※※※※※※※※※※※※※\n“; cout<<“\n请输入(1~8):“; do{ cin.get(c); }while(c<'1'||c>'8'); return c-48; } 6 程序调试与测试结 在vc++6.0运行界面如图6.1所示: 图6.1 字符串处理函数系统菜单界面 选择1,输入字符串1:c++kecheng,和字符串2:zifuchuan,运行界面如图6.2所示:
图6.2字符串赋初值并输出 选择2,运行界面如图6.3所示:
图6.3 字符串的长度 选择3,运行界面如图6.4所示:
图6.4 字符串复制 选择4,运行界面如图6.5所示:
(1) (2) (3) 图6.5 字符串比较大小 选择5,输入字符串:kaoshichengji,查找cheng运行界面如图6.11所示:
若不存在,如图所示 图6.6字符串查找 选择6,插入字符串 将she插入到c++kechengji中,运行界面如图6.12所示:
图6.7字符串插入 选择7,输入字符串huaadongjiaoda,删除a,运行界面如图6.12所示:
图6.8字符串删除 7 总结 在本次课程设计中,所完成的字符串处理函数系统实现了字符串的简单的复制,比较,删除等功能,同时也实现了字符串的查找功能。其中有关字符串的查找实现的不太好,如果字符串中有重复字符的话,只能查找到第一个字符所在的位置,希望在以后的自主学习中能解决这个问题,并完美的实现它。其次,在本程序中,由于对虚函数掌握不到位,在本程序设计时,而没有使用虚函数。还有一处不太完美,在字符串插入时,没有在原数组的基础上,而是建立了一个新的字符数组,希望在下学期的学习中能改进这个问题。

通过做C++程序设计课程设计,我复习了C++语言的知识,加深了对C++语言中各种语句的理解和运用,收获很大。然而在做“字符串插入”时,遇到了困难,只能我去网上搜索了资料,并根据自己的理解写出了程序。这让我认识到了自己的不足,让我明白在编程道路上我还有很远的路要走。在调试程序的过程中,我总结出了一些规律,懂得了怎样才能更快更好地发现自己的错误,这给了我很大的收获。在以后的学习中,我会增加对知识的熟练度,尽量用简单明了的方法编写程序,增加知识面,,去了解更多的编程语言,使自己在以后的编程道路上走得更加顺利。

参考文献 [1] 钱能.C++程序设计教程[M].北京:清华大学出版社,2003 [2] 谭浩强.C++程序设计[M].北京:清华大学出版社,2004 [3] 李春葆.数据结构(C语言版)习题与解析[M]. 北京:清华大学出版社,2002

推荐访问:
上一篇:企业项目实施方案模板(2)
下一篇:第三方跨境支付跨境电商对策研究

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有