数据结构(c语言版)
课程设计报告
文章编辑程序的设计
学 院: 信息科学技术学院 班 级: 信息工程09级 1 班 学 号: 200941843107 姓 名: 指导教师:
董升 何儒云
完成日期: 2010年12月
目录
1.需求分析——文章编辑.......................................... - 3 - 2.程序设计...................................................... - 3 -
结构体的设计: .............................................. - 3 - 函数的设计: ................................................ - 3 - 主函数的设计: .............................................. - 8 - 3.测试分析...................................................... - 9 - 4.用户说明..................................................... - 10 - 5.经验和体会................................................... - 10 - 6.附录——程序完整原代码....................................... - 10 -
- 2 -
1.需求分析——文章编辑
题目:22题,文章编辑。
功能:从键盘输入一页文字,静态存储在一个文件中 要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;
(2)分4行输出\全部字母数\、\数字个数\、\空格个数\、\文章总字数\(3)输出删除某一字符串后的文章;
2.程序设计
结构体的设计:
typedef struct essay {
char *line;//动态分配的字符数组 struct essay *next;//结构体指针 }ESS;
//创建结构体,行与行之间用链表的形式
函数的设计:
#include
void create(ESS * &h)//创造链表 {
char m[1000]; ESS *p; p=(ESS *)malloc(sizeof(ESS));
- 3 -
h=p; int i,k; FILE *fp; fp=fopen(\所输入的文本将保存在d盘的rr文本文档中 printf (\输入文章, 用Ctrl+B结束输入:\\n\按Ctrl+B(^B)将结束输入 while(1) { gets(m); //输入字符串 if(strlen(m)>1000) { printf(\超过1000字符\\n\ break; } if(m[0]==2)break; //如果发现输入 ^B,则退出输入 p=p->next=(ESS *)malloc(sizeof(ESS)); p->line=(char *)malloc(sizeof(char)*strlen(m+1)); //为结点分配空间 strcpy(p->line,m);//将字符串m,复制到p所指向的字符串中 for(i=0;i<(k=strlen(m))&&(p->line[i]!=2);i++) fwrite(&p->line[i],sizeof(char),1,fp);//写入文本文档中 fputc('\\n',fp); if(m[strlen(m)-1]==2) //除去最后一个控制符 ^B { p->line[strlen(m)-1]='\\0'; break; } }
p->next=NULL; /*最后的一个指针为空 */ h=h->next; //将下一个节点赋值到头结点中 }
int Count(ESS * h) //统计数字 {
ESS *p=h; int co=0; int i;
int Lenght; do
{
Lenght=strlen(p->line); /*计算当前 line 里的数据元素的个数*/ for(i=0;i
- 4 -
while((p=p->next)!=NULL); //遍历 链表不为空 return co; }
int Letter(ESS * h)//统计字母 { ESS *p=h; int co=0; int Lenght; do
{
Lenght=strlen(p->line); /*计算当前 line 里的数据元素的个数*/ for(int i=0;i
while((p=p->next)!=NULL); //遍历 链表不为空 return co; /*返回文章的字母总数*/ }
int chinese(ESS * h)//统计符号 { ESS *p=h; int co=0; int Lenght; do
{
Lenght=strlen(p->line); /*计算当前 line 里的数据元素的个数*/ for(int i=0;i
while((p=p->next)!=NULL); //遍历 链表不为空 return co; /*返回*/ }
int Space(ESS * h)//统计空格 {
ESS *p=h; int co=0; int Lenght;
/*计算- 5 -