当前位置:文档之家› 实验三串基本操作的编程实现

实验三串基本操作的编程实现

实验三串基本操作的编程实现
实验三串基本操作的编程实现

实验三串基本操作的编程实现

【实验目的】

容:串基本操作的编程实现

要求:

串基本操作的编程实现(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;

}

相关主题
文本预览
相关文档 最新文档