串的基本操作的编程实现

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

数据结构双语班

DATA STRUCTURE BILINGUAL-TEACHING CLASS 实验报告003 批改单

Experiment Report Commendatory Bill

串基本操作的编程实现

2006-2007(2)学期 T523-1班学号:33 姓名:王娟

指导老师:马春江时间:2007.04.19

【实验目的】

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

要求:

串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、

删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,

存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现,用

菜单进行管理。也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】

验证性实验(学时数:2H)

【实验内容】

可以只完成基本的功能演示程序。也可以通过一个较为实用的系统下体现各

种操作的作用,如可以开发一个文本统计程序,要求如下:

编写程序,进行字符串统计系统的设计

将存在txt文件中的文本进行统计:字母数、标点符号数、单词数、句子数、

段落数。

进一步的工作

(统计:汉字数、每个单词的次数和所在行数等)

【详细设计】

#include

#include

#define Maxlen 50

#include

using namespace std;

typedef struct

{

char ch[Maxlen];

int len;

}strtype;

void disp(strtype *s) //输出串

{

if(s->len==0)

cout<<"空串"<

else

{for(int i=0;ilen;i++)

{

cout<ch[i];

}cout<

}

void create(strtype *s) //将普通字符串赋给串{

char b,string[Maxlen]=" ";

int k=0;

cout<<"请输入一个字符串(以#结束) "<

for(;;)

{

cin>>b;

if(b=='#') break;

k++;

}

char *str=string;

strcpy(s->ch,str);

s->len=strlen(str);

}

int length(strtype *s) //求串的长度{

return s->len;

}

void copy(strtype *s1,strtype *s2) //串的复制{

int i;

for(i=0;ilen;i++)

s2->ch[i]=s1->ch[i];

s2->len=s1->len;

s2->ch[s2->len]='\0'; //添加字符串结束符

}

void subs(strtype *s,int pos,int n) //求子串

{

int i;

strtype ss;

strtype *sub=&ss;

if(pos+n-1>length(s)) //参数不正确cout<<"子串过长!";

else

{

sub->ch[i-pos+1]=s->ch[i];

sub->len=n;

sub->ch[sub->len]='\0';

disp(sub);

}

}

int concat(strtype *s,strtype *t) //连接两个串

{

int i;

if((s->len+t->len)>Maxlen)

{

cout<<"连接失败!"<

return 0;

}

for(i=0;ilen;i++)

s->ch[i+s->len]=t->ch[i];

s->len=s->len+t->len;

s->ch[s->len]='\0';

disp(s);

cout<<"连接成功!"<

return 1;

}

int ins(strtype *s,strtype *t,int i) //插入一个子串

{

int j;

if(s->len+t->len>Maxlen)

return 0;

for(j=s->len-1;j>=i-1;j--) //i之后的所有元素后移t->len个位置

s->ch[j+t->len]=s->ch[j];

for(j=0;jlen;j++)

s->ch[j+i-1]=t->ch[j];

s->len=s->len+t->len;

s->ch[s->len]='\0';

return 1;

}

strtype replace(strtype *s1,strtype *s2,int i,int j) //串的等长替换{

strtype s;

int n,k;

if(i+j-1len)

{

for(n=0;n

s.ch[n]=s1->ch[n];

for(n=0;nlen;n++)

s.ch[i+n-1]=s2->ch[n];

s.len=i+s2->len-1;

for(n=s.len,k=i+j-1;klen;n++,k++)

s.ch[n]=s1->ch[k];

s.len=n;

s.ch[s.len]='\0';

s1=&s;

disp(s1);

}

else

{

s.ch[0]='\0';

s.len=0;

return s;

}

int del(strtype *s,int pos,int n) //删除一个子串

{

int i;

if(pos+n>s->len)

{cout<<"长度过长,删除失败!"<

for(i=pos+n-1;ilen;i++)

s->ch[i-n]=s->ch[i];

s->len=s->len-n;

s->ch[s->len]='\0';

return 1;

}

////////////////////////////////////////////////////////////////////////////// /

////////////////////////////////菜单

///////////////////////////////////////////

void menu()

{

char *p[]={" ",

" ",

" ",

"

" ",

"┏━━┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳━━┓",

"┃ ^_^┠数┨┠据┨┠结┨┠构┨┠程┨┠序┨┠设┨┠计┨^_^ ┃",

"┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┃",

"┣━━━━━━━━任意进制数据的相互转换━━━━━━━━━┫",

"┃程序功能: ┃",

"┃┃",

"┃本程序实现字符串的基本操作。┃",

"┃┃",

"┃ 0.退出程序。(按其他键继续) ┃",

"┃┃",

"┃┃",

"┃┃",

"┃OO════∩════OO指导老师:马春江┃",

"┃湖北汽车工业学院作者:王娟┃",

"┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮ QQ:550361098 ┃",

"┃╰═▃_电气工程系∠════▔▔▔┃",

"┃*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*,, ┃",

"┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮ *:-.,,.-:*,、☆*:-., ┃",

"┃║双║║语║║班║║天║║地║★*:-., ┃",

"┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘┃",

"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"

};

int i,j;

for(i=20;i>=0;i--)

{

system("cls");

for(j=i;j<=25;j++)

{

cout<<"\t"<

}

Sleep(150);

}

}

void menu2()

{

char *p[]={"┏━━┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳━━┓",

"┃ ^_^┠数┨┠据┨┠结┨┠构┨┠程┨┠序┨┠设┨┠计┨^_^ ┃",

"┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┃",

"┣━━━━━━━━字符串的基本操作实现━━━━━━━━━┫",

"┃程序功能: ┃",

"┃┃",

"┃本程序实现字符串的基本操作┃",

"┃┃

"┃ 0.退出程序。(按其他键继续) ┃",

"┃ 1.清屏┃",

"┃ 2.求串的长度┃",

"┃ 3.串的复制┃",

"┃ 4.求子串┃",

"┃ 5.连接两个串┃",

"┃ 6.串的插入操作┃",

"┃ 7.串的等长替换┃",

"┃ 8.串的删除操作┃",

"┃ 9.输出一个串┃",

"┃┃",

"┃┃",

"┃OO════∩════OO指导老师:马春江┃",

"┃湖北汽车工业学院作者:王娟┃",

"┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮ QQ:550361098 ┃",

"┃╰═▃_电气工程系∠════▔▔▔┃",

"┃*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*,, ┃",

"┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮ *:-.,,.-:*,、☆*:-., ┃",

"┃║双║║语║║班║║天║║地║★*:-., ┃",

"┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘┃",

"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"

};

int i;

system("cls");

for(i=0;i<=28;i++)

{

cout<<"\t"<

}

}

////////////////////////////////////////////////////////////////////////////// ///

///////////////////////////main/////////////////////////////////////////////// ///

void main()

{

menu();

strtype t1,t2;

strtype *s1=&t1,*s2=&t2;

char ch,str1[Maxlen]=" ",str2[Maxlen]=" ";

int i,j=0,k=0,n,pos;

cin>>ch;

if(ch=='0') exit(0);

menu2();

char *str01=str1, *str02=str2;

cout<<"字符串的赋初值"<

create(s1);

disp(s1);

cout<

for(;;)

{

cin>>ch;

switch(ch)

{

case '0':

exit(0);

case '1':

system("cls");menu2();

break;

case '2':

cout<<"求串的长度"<

cout<<"长度是:"<

break;

case '3':

cout<<"串的复制"<

copy(s1,s2);

disp(s2);

cout<<"复制成功!"<

break;

case '4':

cout<<"求子串"<

cout<<"输入位置"<

cin>>pos;

cout<<"输入长度"<

cin>>n;

subs(s1,pos,n);

break;

case '5':

cout<<"两个串的连接"<

create(s2);

disp(s1);

concat(s1,s2);

break;

case '6':

cout<<"串的插入操作"<

cout<<"输入插入位置:";

cin>>i;

create(s2);

ins(s1,s2,i);

disp(s1);

break;

case '7':

cout<<"串的等长替换"<

cout<<"输入替换位置:";

cin>>i;

cout<<"输入长度:";

cin>>j;

create(s2);

replace(s1,s2,i,j);

break;

case '8':

cout<<"串的删除操作"<

cout<<"输入删除子串起始位置:";

cin>>pos;

cout<<"输入删除子串的长度:"; cin>>n;

del(s1,pos,n);

disp(s1);

break;

case '9':

cout<<"输出一个串"<

break;

default:

cout<<"输入无效菜单命令"<

}

}

}

【用户手册】

【心得体会】

本次实验,通过上机对串的基本操作有了更深刻的了解。关键是本次实验完全是自己所编。在编程过程中,会有很多错误,但都通过翻阅书籍或看范例,得以一一改正,获益不小。这也更加增强了我学好数据结构的信心。相信以后会编出更好的程序。

对串的逻辑结构、存储结构和基本操作的算法设计都有了一定的掌握,了解到串在高级语言中可以广泛应用,如在学号、职工编号、设备编号等,它们不应该是整数处理而应该是字符串处理,都要用到字符串的基本操作。

word制作流程图

步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

步骤二:制作流程图的标题 基本工作环境设置好之后就开始制作流程图的标题。大家看到的最终效果中的标题是放在一个矩形自选图形中的,下面开始制作。 1.在窗口Word窗口底部的自选图形工具栏中选择“矩形”按钮(图 4)。 2.这时可以在页面中看到“在此创建图形”的画布,接着拖动鼠标,在该画布中绘制矩形,让矩形的宽度与画布相同,高度可参照最终效果图,约3厘米。

3.画好后调整画布的高度,使之与矩形的高度相同(图 5)。 4.接下来选中插入的矩形,单击鼠标右键,在弹出的菜单中选择“设置自选图形格式”命令,打开“设置自选图形格式”对话框,在“颜色与线条”选项卡中,先设置线条颜色为“无线条颜色”,接着单击“填充”区“颜色”下拉箭头,选择“其它颜色”命令,打开“颜色”对话框,参照下图设置填充颜色(图6),完成后依次单击两次“确定”。 5.接下来在矩形框中插入艺术字标题。选中矩形框,单击鼠标右键,在弹出的菜单中选择“添加文字”命令,这时可以看到光标在矩形框内闪动,表示等待添加文字。

C语言数据结构串的基本操作

实验九串的基本操作 #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars 的长度i if(!i) { // chars的长度为0 (*T).ch = NULL; (*T).length = 0; } else { // chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char)); // 分配串空间 if(!(*T).ch) // 分配串空间失败 exit(0); for(j = 0; j < i; j++) // 拷贝串 (*T).ch[j] = chars[j]; (*T).length = i; } return 1; } // 由串S复制得串T int StrCopy(HString *T,HString S) { int i; if((*T).ch) free((*T).ch); // 释放T原有空间 (*T).ch=(char*)malloc(S.lengt h*sizeof(char)); // 分配串空间if(!(*T).ch) // 分配串空间失 败 exit(0); for(i=0;i

串的基本操作

串的基本操作 一、实验目的、意义 (1)理解串的堆分配存储结构。 (2)理解用它们表示时插入,生成串,联接串与求子串的算法。 (3)根据具体问题的需要,能够设计出相关算法。 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: 定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串等。 三、实验所涉及的知识点 C语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接串与求子串的算法。 四、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。) 五、总结与体会

(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。) 调试程序时,出现了许多错误。如:串的堆分配存储结构、串的联接等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。 六、程序清单(包含注释) #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars的长度i if(!i)

数据结构《第4章 串存储与基本操作的实现》

第四章串存储与基本操作的实现 本章学习要点 ◆熟悉串的相关概念以及串与线性表的关系 ◆重点掌握串的定长存储、堆分配存储的表示方法与基本操作的实现 ◆了解串的各种存储结构,能根据需要合理选用串的存储结构解决实际问题 “串”(string),是字符串的简称,它是一种特殊的线性表,其特殊性在于组成线性表的数据元素是单个字符。字符串在计算机处理实际问题中使用非常广泛,比如人名、地名、商品名、设备名等均为字符串。同样在文字编辑、自然语言理解和翻译、源程序的编辑和修改等方面,都离不开对字符串的处理。 4.1串的基本概念 4.1.1串的概念 1.串的定义 串(string)是由n个字符组成的有限序列,记为:S=”a0a1a2…a n-1” (n≥0)。 其中,S是串的名字,字符序列a0a1a2…a n-1是串的值,a i(0≤i≤n-1)可以是字母、数字或其他字符元素;由于在C语言系统中数组元素的下标是从0开始的,所以串中所含元素的序号等于该元素的下标值加1;串中所含字符的个数n称为该串的长度,长度为0的字符串称为空串(null string)。 从串的定义可以看出,串实际上是数据元素为字符的特殊的线性表。 例如: (1)A=“X123” (长度为4的串) (2)B=“12345654321” (长度为11的串) (3)C=“Bei Jing” (长度为8的串) (4)D=“” (长度为0的空串) (5)E=“This is a string” (长度为16的串) (6)F=“ is a ” (长度为6的串) 2.子串、主串和位置 串中任意连续的字符组成的子序列称为该串的子串;相应地,包含子串的串称为主串。串中的字符在串序列中的序号称为该字符在该串中的位置;子串的第一个字符在主串中的位置称为子串在主串中的位置。显然,串为其自身的子串,并规定空串为任何串的子串。显然,在不考虑空子串的情况下,一个长度为n的字符串具有n(n+1)/2个子串。 例如: 在上例的(6)中串F就是(5)中串E的子串,且子串F在主串E中的位置是5。由于空格符也是一个字符,所以在串G=“abc defghne”中包含有子串“c def”,而串“cdef”不是串G的子串。串G中第一个字符…e?的位置是6,第二个字符…e?的位置是11。 3.串的比较 如果两个串的长度相等且对应位置上的字符相同,则称这两个串相等。两个串A、B的比较过程是:从前往后逐个比较对应位置上的字符的ASCII码值,直到不相等或有一个字符串结束为止,此时的情况有以下几种: (1)两个串同时结束,表示A等于B; (2)A中字符的ASCII码值大于B中相应位置上字符的ASCII码值或B串结束,表示A大于B;(3)B中字符的ASCII码值大于A中相应位置上字符的ASCII码值或A串结束,表示A小于B。

简单制作亿图流程图的基本操作

简单制作亿图流程图的基本操作 导语: 亿图图示是一款功能强大的综合性绘图软件,使用它可以很轻松的制作出各种流程图。本文讲解了一些用亿图绘制流程图的基本操作,下面就一起来看看吧。 免费获取亿图图示软件:https://www.360docs.net/doc/b617537044.html,/edrawmax/ 适合在电脑上用的流程图软件有哪些? 适合在电脑上画流程图的软件可以说非常多了,一些比较有名的都是国外的,但国内也有优秀的流程图软件,比如说亿图图示。这是一款国产的、可以画专业流程图的软件,操作十分符合国人的习惯。除了各种流程图以外,亿图图示同时也支持绘制思维导图、工业设计、组织结构图等,集200种以上的绘图工具于一身。软件提供矢量基础的20000个以上的符号、1000个以上的模板和例子以便用户绘图使用。同时,亿图图示也支持多种类型文件的导入导出,导入如Visio、SVG,导出如Visio、SVG、HTML、PS、JPG、PNG、PDF、Office文件等等。

亿图图示软件特色: 1、丰富的背景样式:几十套背景样式供用户使用,且只需拖拽样式到画布即可替换背景。 2、无限量的图框:可以在画布中添加无限量的图框,大大满足用户的创作需求。 3、页面适应到绘画:画布可无限量之大,一键点击“页面适应到绘图”,软件即可自动剪切画布至绘图区域。 4、免费更新提醒:当软件有新的版本或模板更新时,软件可提醒用户进行更新操作。 5、软件咨询服务:在绘图过程中遇到操作难题,可在线与客服人员联系,并解决问题。 如何使用用亿图图示软件在电脑上画流程图? 打开软件后,会自动进入【新建】预定义模板和例子的界面,在这里,选择【流程图】,此时右侧的界面,会跳转至流程图模板和例子的界面,你可以根据需求,选择对应的流程图类型进行快速绘图。

串的基本操作

1上机实训3:串的基本操作 一、实训目的 通过实训,掌握串的运算(赋值,比较,联结,插入子串,模式匹配……等) 二、实验理论知识 1)串的基本概念及其含义 串( string)是由零个或多个字符组成的有限序列,一般记作: s='a1a2…an'(n≥0),其中s为串的名字,用单引号括起来的字符序列为串的值;ai(1≤i≤n)可以是字母、数字或其它字符(取决于程序设计语言所使用的字符集);n为串中字符的个数,称为串的长度。 2)串的存储表示及其实现 ●顺序存储 可以用一组地址连续的存储单元依次存放串的各个字符,这是串的顺序 存储结构,也称为顺序串 ●链式存储 和线性表的链式存储结构相类似,也可采用链表方式存储串值。串的这 种链式存储结构简称为链串。用链表存储字符串,每个结点需要有两个 域:一个数据域(data)和一个指针域(Next),其中数据域存放串中的 字符,指针域存放后继结点的地址。 3)模式匹配问题 三、实训案例与分析 【实例1】串的存储与基本运算 【实例分析】在本实例中练习计算字符串的长度、字符串的复制、字符串的比较、字符串的连接、字符串的插入等基本操作。在设计时 1)编写一个菜单函数,根据不同情况做(1-5)不同选择。 2)如果选择1,即要求计算输入字符串的长度。 3)如果选择2,完成字符串的复制。 4)如果选择3,完成字符串的比较。 5)如果选择4,完成两个字符串的连接。 6)如果选择5,字符串的插入。 【参考程序】 #include #define MAX 128

typedef enum {fail,success} status; typedef enum {false,true} boolean; main() { int strlen(); void strass(); boolean strcmp(); status strcat( ); status strins(); int t,n,i; boolean b; status st; char s[MAX],s1[MAX],s2[MAX]; printf("\n1. The length of string\n"); printf(" 2. The assignment of string\n"); printf(" 3. A string compare with another string:\n"); printf(" 4. A string connect with another string:\n"); printf(" 5. A string to be inserted into another string\n"); printf(" Please input a operation:");/*输入操作选项*/ scanf("%d",&t); switch(t) { case 1: printf("please input a string:\n"); getchar(); gets(s); n=strlen(s); printf("the length is: %d",n); break; case 2: printf("please input the first string:\n"); getchar(); gets(s1); printf("please input the second string:\n"); getchar(); gets(s2);

(完整版)Excel表格的基本操作[初学者专用]超级技能

目录 技巧1、单元格内强制换行 技巧2、锁定标题行 技巧3、打印标题行 技巧4、查找重复值 技巧5、删除重复值 技巧6、快速输入对号√ 技巧7、万元显示 技巧8、隐藏0值 技巧9、隐藏单元格所有值。 技巧10、单元格中输入00001 技巧11、按月填充日期 技巧12、合并多个单元格内容 技巧13、防止重复录入 技巧14、公式转数值 技巧15、小数变整数 技巧16、快速插入多行 技巧17、两列互换 技巧18、批量设置求和公式 技巧19、同时查看一个excel文件的两个工作表。技巧20:同时修改多个工作表 技巧21:恢复未保存文件 技巧22、给excel文件添加打开密码 技巧23、快速关闭所有excel文件 技巧24、制作下拉菜单 技巧25、二级联动下拉 技巧27、删除空白行 技巧28、表格只能填写不能修改 技巧29、文字跨列居中显示 技巧30、批注添加图片 技巧31、批量隐藏和显示批注 技巧32、解决数字不能求和 技巧33、隔行插入空行 技巧34、快速调整最适合列宽 技巧35、快速复制公式 技巧36、合并单元格筛选

技巧1、单元格内强制换行 在单元格中某个字符后按alt+回车键,即可强制把光标换到下一行中。 技巧2、锁定标题行 选取第2行,视图 - 冻结窗格 - 冻结首行(或选取第2行 - 冻结窗格)冻结后再向下翻看时标题行始终显示在最上面。 技巧3、打印标题行 如果想在打印时每一页都显示标题,页面布局 - 打印标题 - 首端标题行:选取要显示的行

技巧4、查找重复值 选取数据区域 - 开始 - 条件格式 - 突出显示单元格规则 - 重复值。 显示效果:

实验三 串基本操作的实现

实验三串基本操作的实现 专业:计算机科学与技术班级:10计本1班学号:姓名: 实验地点: B102 实验时间: 2011.11.2 指导教师:王润鸿 实验目的 1 理解定长顺序串的存储结构及基本操作的定义; 2掌握定长顺序串的基本操作; 3学会设计实验数据验证程序。 实验环境 计算机,window xp操作系统,VC++6.0 实验内容 1. 存储结构定义: #define MAXSTRLEN 255 //串的长度最大为255 typedef unsigned char SString[MAXSTRLEN+1]; //0号单元存放串的长度,其最大值刚好是255 2. 实现的基本操作: StrAssign (&T, chars) 初始条件:chars 是串常量。 操作结果:赋于串T的值为chars。 StrCopy (&T, S) 初始条件:串S 存在。 操作结果:由串S 复制得串T。 DestroyString (&S) 初始条件:串S 存在。 操作结果:串S 被销毁。 StrEmpty (S) 初始条件:串S 存在。 操作结果:若S 为空串,则返回TRUE,否则返回FALSE。 StrCompare (S, T) 初始条件:串S 和T 存在。 操作结果:若S>T,则返回值=0;若S=T,则返回值<0;若S

数据结构3-串及其应用.

实验3:串及其应用 一、实验目的 掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。 二、问题描述 全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。用户可完成对文本的插入、删除、修改等功能。 三、实验要求 1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移 至文件首、尾;光标移至本行首、尾。 2、实现基本编辑命令: I----在当前光标前插入内容,按ESC结束 F----在当前光标后插入内容,按ESC结束 D----删除光标所在行 ND---删除光标位置开始的n行 N-----删除光标上的字符 W----将修改后的文本保存下来 Q----退出编辑状态。 四、实验环境

PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境 五、实验步骤 1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。 2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序 中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。 3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区; 4、操作确定后,将修改后的文本存到文件中。 六、测试数据 自行设定。 七、实验报告要求 实验报告应包括以下几个部分: 1、问题描述; 2、算法的设计描述; 3、测试结果的分析与讨论。 4、设计与实现过程中的体会,进一步的改进设想。 5、实验总结。

八、思考题 1、对命令格式非法等错误做严格检查和适当处理。 2、扩充编辑操作,如对某行进行串替换?

串的基本操作

i 串的基本操作 一、 实验目的、意义 (1) 理解串的堆分配存储结构。 (2) 理解用它们表示时插入,生成串,联接串与求子串的算法。 (3) 根据具体问题的需要,能够设计出相关算法。 二、 实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输 入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修 改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: 定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串 三、实验所涉及的知识点 C 语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接 串与求子串的算法。 四、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图 方式给出。) F 'E=?JK^?t?iS^?Deb ug?T extl .e κe 1 n 呂扇: c-?S 》爭t -託联接串0产主的串片为:GOd bιje!God luck? :GOd bj/ef &串空否? ?<1: X 肌否) GDd Inch? ?s70 ≡ OO ??串t 相同的子串用串討弋普后.串晚: GQqd by^tGood Iucl

用Word制作漂亮工作流程图的方法

在日常的很多实际任务中,我们可能需要表达某个工作的过程或流程。有些工作的过程比较复杂,如果你仅仅用文字表达,通常是很难描述清楚的。与此同时,听者也难于搞懂,在这种情况下,最好的方式就是绘制工作流程图,图形的直观性会让双方都大大获益。 笔者曾经介绍过用MS VISIO 2002制作工作流程图的方法(请参阅《用Visio 做工作流程图》),但是很多朋友反映自己的电脑上并没有安装VISIO,而且对VISIO还有种陌生感。为了便于更多的朋友轻松地制作工作流程图,下面我们介绍利用Word制作漂亮工作流程图的方法。 任务要求:这里我们还是以制作毕业论文写作流程图为例,该工作流程图表达的是数理信息学院毕业生毕业论文的制作过程。 步骤一:页面和段落的设置 步骤二:制作流程图的标题 步骤三:绘制流程图框架 步骤四:流程图的对齐与修饰 步骤五:添加连接箭头 步骤六:添加折线连接符和说明性文字 为了让朋友们对制作目标有个大概的了解,下面先来看一下完成后的效果图(图 1)。

为了提高工作流程图的制作效率,在具体制作之前应该先在头脑中构思一下流程图的大概效果,最好能够在稿纸上把效果图画出来,这往往比边想边做要快很多。 在纸上画好草图之后,我们就可以打开Word 2003进行具体的制作了,本例的操作是在Word 2003中进行的,使用Word其它版本的朋友可以参照进行。 步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图 2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

数据结构串基本操作代码

实验三串 //串的基本操作 #include "stdio.h" #include "stdlib.h" #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; void strlength(SString S)//求字串并放到 S[0] 中 { int m; for(m=1;S[m]!='\0';m++); S[0]=m-1; } void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{ strlength(S); int i; for(i=S[0];i>=n;i--) S[i+1]=S[i]; S[n]=a; S[S[0]+2]='\0'; } int compare(SString S,SString T) { strlength(S); strlength(T); int i; for(i=1;i<=S[0]&&i<=T[0];i++) { if(S[i]>T[i]) return 1; if(S[i]T[0]) return 1;

else if(S[0]S[0]||len<0||len>S[0]-pos+1) { printf("Error!position or length is out of range\n"); return 0; } for(i=1;i<=len;i++)

制作工作流程图

步骤一:页面和段落的设置 为了流程图有较大的绘制空间,我们先来设置一下页面。 1.启动Word 2003,打开一个空白文档,并切换到页面视图。选择菜单“文件→页面设置”命令,打开“页面设置”对话框,在“页边距”选项卡中,设置上下边距为“1厘米”,左右边距为“2厘米”(图2),完成后单击“确定”按钮。 2.由于后面要在自选图形中输入文字,为了让输入的文字在垂直方向上看起来居中,这里顺便设置一下段前距。选择菜单“格式→段落”命令,打开“段落”对话框,在“缩进和间距”选项卡中设置段前间距为“1行”,完成后单击“确定”(图 3)。

步骤二:制作流程图的标题 基本工作环境设置好之后就开始制作流程图的标题。大家看到的最终效果中的标题是放在一个矩形自选图形中的,下面开始制作。 1.在窗口Word窗口底部的自选图形工具栏中选择“矩形”按钮(图 4)。 2.这时可以在页面中看到“在此创建图形”的画布,接着拖动鼠标,在该画布中绘制矩形,让矩形的宽度与画布相同,高度可参照最终效果图,约3厘米。

3.画好后调整画布的高度,使之与矩形的高度相同(图 5)。 4.接下来选中插入的矩形,单击鼠标右键,在弹出的菜单中选择“设置自选图形格式”命令,打开“设置自选图形格式”对话框,在“颜色与线条”选项卡中,先设置线条颜色为“无线条颜色”,接着单击“填充”区“颜色”下拉箭头,选择“其它颜色”命令,打开“颜色”对话框,参照下图设置填充颜色(图6),完成后依次单击两次“确定”。 5.接下来在矩形框中插入艺术字标题。选中矩形框,单击鼠标右键,在弹出的菜单中选择“添加文字”命令,这时可以看到光标在矩形框内闪动,表示等待添加文字。

实验四 串及其应用

实验4:串及其应用 一、实验目的 掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。二、问题描述 全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。用户可完成对文本的插入、删除、修改等功能。 三、实验要求 1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移 至文件首、尾;光标移至本行首、尾。 2、实现基本编辑命令: I----在当前光标前插入内容,按ESC结束 F----在当前光标后插入内容,按ESC结束 D----删除光标所在行 ND---删除光标位置开始的n行 N-----删除光标上的字符 W----将修改后的文本保存下来 Q----退出编辑状态。 四、实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境 五、实验步骤 1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。 2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序 中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。 3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区; 4、操作确定后,将修改后的文本存到文件中。 六、测试数据 自行设定。 七、算法设计 串的基本操作: 一、串赋值:

Status StrAssign(HString &T,char *chars) { // 生成一个其值等于串常量chars的串T int i,j; if(T.ch) free(T.ch); // 释放T原有空间 i=strlen(chars); // 求chars的长度i if(!i) { // chars的长度为0 T.ch=NULL; T.length=0; } else { // chars的长度不为0 T.ch=(char*)malloc(i*sizeof(char)); // 分配串空间 if(!T.ch) // 分配串空间失败 exit(OVERFLOW); for(j=0;j #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 struct HString { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }; /***************文本编辑器的程序 **********************/ #define MAX_LEN 50 // 文件最大行数 #define LINE_LEN 80 // 每行字符数最大值+1 #define NAME_LEN 20 // 文件名最大长度(包括盘符、路径)+1 Status StrAssign(HString &T,char *chars) { // 生成一个其值等于串常量chars的串

顺序串的基本操作实验报告

宁波工程学院电信学院计算机教研室 实验报告 课程名称:数据结构实验项目:顺序串的基本操作 实验人员:徐浩学号: 10401010209 班级:计科102 指导教师:宋宏图 实验位置:计算机中心二楼实验日期: 2011-10-13 一、实验目的 1)熟悉串的定义和串的基本操作。 2)掌握顺序串的基本运算。 3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。 二、实验环境 装有Visual C++6.0的计算机。 本次实验共计2学时。 三、实验内容 编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。具体如下: 编写栈的基本操作函数 顺序串类型定义如下所示: typedef struct { char ch[MAXSIZE]; int len; } SeqString; (1)串赋值Assign(s,t) ?将一个字符串常量赋给串s,即生成一个其值等于t的串s (2)串复制StrCopy(s,t) ?将串t赋给串s (3)计算串长度StrLength(s) ?返回串s中字符个数 (4)判断串相等StrEqual(s,t) ?若两个串s与t相等则返回1;否则返回0。 (5)串连接Concat(s,t) ?返回由两个串s和t连接在一起形成的新串。 (6)求子串SubStr(s,i,j)

?返回串s中从第i(1≤i≤StrLength(s))个字符开始的、由连续j个字符组成的子串。 (7)插入InsStr (s,i,t) ?将串t插入到串s的第i(1≤i≤StrLength(s)+1)个字符中,即将t的第一个字符作 为s的第i个字符,并返回产生的新串 (8)串删除DelStr (s,i,j) ?从串s中删去从第i(1≤i≤StrLength(s))个字符开始的长度为j的子串,并返回产 生的新串。 (9)串替换RepStr (s,s1,s2) ?在串s中,将所有出现的子串s1均替换成s2。 (10)输出串DispStr(s) ?输出串s的所有元素值 (11)判断串是否为空IsEmpty(s) 编写主函数 调用上述函数实现下列操作: (1)建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk” (2)复制串t到t1,并输出t1的长度 (3)在串s的第9个字符位置插入串s1而产生串s2,并输出s2 (4)删除s第2个字符开始的5个字符而产生串s3,并输出s3 (5)将串s第2个字符开始的3个字符替换成串s1而产生串s4,并输出s4 (6)提取串s的第8个字符开始的4个字符而产生串s5,并输出s5 (7)将串s1和串t连接起来而产生串s6,并输出s6 (8)比较串s1和s5是否相等,输出结果 程序: #include #define MAXSIZE 100 typedef struct { char ch[MAXSIZE]; int len; } SqString; void StrAssign(SqString &s,char t[]){//串赋值 int i; for(i=0;t[i]!='\0';i++) s.ch[i]=t[i]; s.len=i; } void StrCopy(SqString &s,SqString t){//串复制 int i;

教你如何制作流程图

在标书编制或者施工方案编写工作中,我们常常会需要绘制施工工艺流程图。如果使用比较经典的流程图绘制工具,比如Visio,可能会觉得比较麻烦,而且也不容易与Word文档一起排版。这时你可能会采用Word自带的流程图绘图工具来绘制流程图。但是,Word的早期版本,即使是Word2000在流程图的绘制,尤其是修改方面都是非常麻烦的。我们常常需要在线条的对准等细节问题上耗费大量的时间。 在网上看到很多网友上传的流程图不是很规范,主要反应在以下几方面:●不符合工艺的实际流程。 ●逻辑关系混乱,不是逻辑关系不全就是逻辑关系错误。 ●很多网友绘制流程图使用的是文本框加箭头的方式绘制,在排版上不 美观,文本框大小不一,不整齐。 那么有没有更好的办法使画出来的工艺流程图既美观又快捷呢?有,在Office XP以上的版本在流程图的绘制方面引入了Visio的很多绘图工具,比如连接符。这时的流程图的绘制比以前方便了许多,也容易了许多。这里,就详细介绍一下使用Word2003绘制流程图的方法。 1、首先在“绘图”工具栏上,单击“自选图形”,指向“流程图”,再单击所需的形状。 注:流程图中的各种形状主要程序编程流程图的形状,多数形状对于我

们工程上的工艺流程图用处不是很大,概括起来,可用的就四种,分别是“过程”、“决策”、“终止”、“准备”四种。 2、单击要绘制流程图的位置。此时你会发现,在页面上出现了如下图所示的虚框。这是什么?以前的版本好像没这东东啊。是,这是Word2003新增功能之一的绘图画布。 绘图画布是在创建图形对象(例如自选图形和文本框)时产生的。它是一个区域,可在该区域上绘制多个形状。因为形状包含在绘图画布内,所以它们可作为一个单元移动和调整大小。明白吧,这个绘图画布可帮助您排列并移动多个图形,当图形对象包括几个图形时这个功能会很有帮助。还记得以前要在Word中排列、移动一组图形的麻烦吗?有了绘图画布,这些烦恼就不再困扰你了。 绘图画布还在图形和文档的其他部分之间提供一条类似框架的边界。在默认情况下,绘图画布没有背景或边框,但是如同处理图形对象一样,可以对绘图画布应用格式。 3、在绘图画布上插入你选择的那个图形。就像这样,插入一个凌形。

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

实验三串基本操作的编程实现 【实验目的】 容:串基本操作的编程实现 要求: 串基本操作的编程实现(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[]); //查找

数据结构C语言串的基本操作

串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int length; }Hstr; void main() { Hstr *l,*p,*r; char c,w; int h,j,k; int i=0; l=(Hstr *)malloc(sizeof(Hstr)); p=(Hstr *)malloc(sizeof(Hstr)); r=(Hstr *)malloc(sizeof(Hstr)); l->length=0; p->length=0; r->length=0; printf("请选择相关操作(数字1~5控制,输入0结束)\n"); printf("--------------1.建立串---------------\n"); printf("--------------2.显示串长度-----------\n"); printf("--------------3.生成与原来相同的串---\n"); printf("--------------4.串比较---------------\n"); printf("--------------5.串连接---------------\n"); printf("--------------6.返回值---------------\n"); scanf("%c",&w); getchar(); while(w) { switch(w) { case '1':{printf("请输入字符(#结束):\n"); scanf("%c",&c); while(c!='#') { l->length++; l->ch[i]=c; i++; scanf("%c",&c);

串的基本操作

#include #include #include typedef struct { char *str; int length; }HString;//堆串 //初始化 void InitString(HString &S) { S.str ='\0'; S.length =0; } //堆串赋值 void StrAssign(HString &S,char *chars) { int i,len; char *p; p=chars;

if(S.str) free(S.str); for(i=0;p[i]!='\0';i++) len=i+1; if(!i) { S.length =0; S.str ='\0'; } else { S.str=(char *)malloc(len*sizeof(char)); if(!S.str ) exit(-1); for(i=0;i

if(S.length ==0) return 1; else return 0; } //求堆串长度 int StrLength(HString S) { return S.length ; } //串的复制操作 int StrCopy(HString &T,HString S) /*将串S复制给串T*/ { int i; T.str =(char *)malloc(S.length*sizeof(char)); if(!T.str) return 0; for(i=0;i

相关文档
最新文档