实验三串基本操作的编程实现
【实验目的】
容:串基本操作的编程实现
要求:
串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或结构、索引结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】
验证性实验(学时数:2H)
【实验容】
字符串用常规的顺序存储法来存储,实现常用的功能。
自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。
修改程序模式:将下面程序空白的地方填空。
程序检查模式:将本文件夹中的程序运行后总结相关功能。
【思考问题】
1.字符串的顺序存储和链表存储的差异?C语言中是如何实现字符串的?
2.在字符串处理方面主要有什么操作?
3.字符串的操作的主要特点是什么?
4.举出几个字符串的应用例?
【参考代码】
//功能:顺序串的基本基本功能
#include
#include
#include
#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< i++; if(ch!=13) str[i]=char(ch); else i=i-1; cout.flush();//为了每次输入后可以立即显示所输入的字符,则先清除缓冲区} length=i+1; cout< return success; } 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< } else cout<<"字符串为空!"< int string::strlength() { return length; } void menu(void) { cout<<"顺序串基本功能菜单"< cout<<"=========="< cout<<"1.建立顺序串(仅限单行的字符串,建议不用汉字。)"< cout<<"2.显示串"< cout<<"3.修改串"< cout<<"4.插入串"< cout<<"5.删除串"< cout<<"6.查找串"< cout<<"7.求串长度"< cout<<"8.结束程序"< 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); if(returnvalue==success) { cout<<"修改成功!"< newstring.strtraverse(); } if(returnvalue==overflow) { cout<<"字符串的最大长度为"< cout<<"发生溢出,操作失败!"< } if(returnvalue==range_error) cout<<"位置错误,操作失败!"< if(returnvalue==empty) cout<<"字符串为空,操作失败!"< } break; case '4': if(flag==0) cout<<"请先建立串!"< else { newstring.strtraverse(); cout<<"请输入要插入的位置:"; cin>>position; cout<<"请输入要插入的字符串:"; cin>>newstr; length=strlen(newstr); returnvalue=newstring.strinsert(position,newstr,length); if(returnvalue==success) { cout<<"插入成功!"< newstring.strtraverse(); } if(returnvalue==overflow) { cout<<"字符串的最大长度为"< cout<<"发生溢出,操作失败!"< } if(returnvalue==range_error) cout<<"位置错误,操作失败!"< } break; case '5': if(flag==0) cout<<"请先建立串!"< else { newstring.strtraverse(); cout<<"请输入要删除的初始位置:"; cin>>beginposition; cout<<"请输入要删除的终止位置:"; cin>>endposition; returnvalue=newstring.strdelete(beginposition,endposition); if(returnvalue==success) { cout<<"删除成功!"< newstring.strtraverse(); } if(returnvalue==range_error) cout<<"位置错误,操作失败!"< if(returnvalue==empty) cout<<"字符串为空,操作失败!"< } break; case '6': if(flag==0) cout<<"请先建立串!"< else { newstring.strtraverse(); cout<<"请输入要查找的字符串:"; cin>>newstr; position=newstring.strsearch(newstr); if(position>0) { cout<<"已找到!"< cout<<"字符串出现的初始位置为:"< } if(position==0) cout<<"您要查找的字符串不存在!"< if(position==-1) cout<<"字符串为空,操作失败!"< } break; case '7': if(flag==0) cout<<"请先建立串!"< else { newstring.strtraverse(); length=newstring.strlength(); cout<<"当前串的长度为:"< } break; case '8': exit(0); break; default: cout<<"输入错误!\n";break; } cout<<"按任意键继续......"< getch(); system("cls"); menu(); } getch(); return 0; }