..
实验三 串基本操作的编程实现
【实验目的】
容:串基本操作的编程实现 要求:
串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或结构、索引结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】
验证性实验(学时数:2H)
【实验容】
字符串用常规的顺序存储法来存储,实现常用的功能。
自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。 修改程序模式:将下面程序空白的地方填空。
程序检查模式:将本文件夹中的程序运行后总结相关功能。
【思考问题】
1. 字符串的顺序存储和链表存储的差异?C语言中是如何实现字符串的? 2. 在字符串处理方面主要有什么操作? 3. 字符串的操作的主要特点是什么? 4. 举出几个字符串的应用例?
【参考代码】
//功能:顺序串的基本基本功能 #include
#define maxsize 30//顺序串的总空间大小
enum returninfo{success,fail,overflow,underflow,range_error,empty};//定义返回信息清单
class string {
public:
string();//构造函数 ~string();//析构函数
returninfo strcreate(); //创建串
returninfo strinsert(int position,char newstr[],int str_length); //插入 returninfo strdelete(int beginposition,int endposition); //删除
returninfo strmodify(int beginposition,int endposition,char newstr[]); //修
.. .
..
改
int strsearch(char newstr[]); //查找 void strtraverse(); //遍历 int strlength();//求串长 private:
char *str; //串 int length; //长度 }; string::string() {
str=new char[maxsize];//申请数组空间 }
string::~string() {}
returninfo string::strcreate() {
int i=-1,ch;
cout<<\请输入要创建的字符串(ctrl+z结束输入):\ while((ch=getch())!=26) {
cout< if(ch!=13) str[i]=char(ch); else i=i-1; cout.flush();//为了每次输入后可以立即显示所输入的字符,则先清除缓冲区 } length=i+1; cout< returninfo string::strinsert(int position,char newstr[],int str_length) //当插入的字符串在原串末尾时,就相当于合并 { return success; } returninfo string::strdelete(int beginposition,int endposition) { return success; } returninfo string::strmodify(int beginposition,int endposition,char newstr[]) .. . .. { return success; } int string::strsearch(char newstr[]) { int i=0,str_length,position=0,count=0; //是否相等标志,count用来确定比较时原串的移动 if(length==0) return -1; str_length=strlen(newstr); for(;i if(str[i]==newstr[count]) {position=i-str_length+2;count++;continue;} else { if(position==1) i=i-count; count=0; position=0; } } return position; } void string::strtraverse() { int i,j; if(length>0) { cout<<\位置: \ for(i=0;i<=length/10;i++) cout<<\ cout< cout<<\位置: \ for(i=0;i<=length/10;i++) { for(j=0;j<=9;j++) cout< cout< cout<<\当前串: \ for(i=0;i .. . .. cout< cout<<\字符串为空!\ } int string::strlength() { return length; } void menu(void) { cout<<\顺序串基本功能菜单\ cout<<\ cout<<\建立顺序串(仅限单行的字符串,建议不用汉字。)\ cout<<\显示串\ cout<<\修改串\ cout<<\插入串\ cout<<\删除串\ cout<<\查找串\ cout<<\求串长度\ cout<<\结束程序\ cout<<\} int main() { int flag=0,returnvalue,position,beginposition,endposition,length; char choice,choose,newstr[maxsize]; string newstring; menu(); while(1) { cout<<\请输入选择:\ cin>>choice; switch(choice) { case '1': if(flag) { cout<<\数据已存在,是否覆盖?(y/n)\ cin>>choose; if(choose=='N'||choose=='n') { cout<<\数据没有发生更改!\ .. . .. break; } if(choose=='Y'||choose=='y') { returnvalue=newstring.strcreate(); if(returnvalue==success) cout<<\创建成功!\ flag=1; } else cout<<\输入错误!\ } else { returnvalue=newstring.strcreate(); if(returnvalue==success) cout<<\创建成功!\ flag=1; } break; case '2': if(flag==0) cout<<\请先建立串!\ else newstring.strtraverse(); break; case '3': if(flag==0) cout<<\请先建立串!\ else { newstring.strtraverse(); cout<<\请输入要修改的初始位置:\ cin>>beginposition; cout<<\请输入要修改的终止位置:\ cin>>endposition; cout<<\请输入修改后的字符串:\ cin>>newstr; returnvalue=newstring.strmodify(beginposition,endposition,newstr); .. .