数据结构课程实验设计1 下载本文

count+=strlen(p->data); }

while((p=p->next)!=NULL); /*遍历 链表*/ return count; }

/*统计str在文章中出现的次数*/

int FindString(LINE * &head,char *str) {

LINE *p=head; int count=0; int h=0;

int len1=0; /*保存当前行的总字符数*/ int len2=strlen(str); /*待统计字符串的长度*/ int i,j,k; do {

len1=strlen(p->data); /*当前行的字符数*/ for(i=0;i

if(p->data[i]==str[0]) {

k=0;

for(j=0;j

if(p->data[i+j]==str[j]) k++; if(k==len2) {count++;i=i+k-1;} } } }

while((p=p->next)!=NULL); /*遍历 链表*/ return count; }

/*删除指定的字符串*/

void delstringword(char *s,char *str) /* *s为输入的字符串,*str为将要删除的字符*/ {

char *p=strstr(s,str); /*从字符串s中寻找str第一次出现的位置*/ char tmp[80];

int len=strlen(s); int i=len-strlen(p); int j=i+strlen(str); int count=0;

for(int m=0;m

strcpy(s,tmp); /*返回新的字符串*/ }

void DelString(LINE * &head,char *str) {

LINE *p=head; do {

if(strstr(p->data,str)!=NULL)delstringword(p->data,str); }

while((p=p->next)!=NULL); /*遍历 链表*/ }

/*向屏幕输出文章*/

void OutPut(LINE * &head) {

LINE *p=head; do {

printf(\ }

while((p=p->next)!=NULL); /*遍历 链表*/ }

void main() {

LINE *head; Create(head);

printf(\输入的文章为:\\n\ OutPut(head); printf(\

printf(\全部字母数:%d \\n\ printf(\数字个数:%d \\n\ printf(\空格个数: %d \\n\ printf(\文章总字数: %d \\n\ char str1[20],str2[20]; printf(\

printf(\请输入要统计的字符串:\ scanf(\

printf(\出现的次数为:%d \\n\ printf(\

printf(\请输入要删除的某一字符串:\ scanf(\

DelString(head,str2);

printf(\删除%s后的文章为:\\n\ OutPut(head); }

四、调试分析: 1.问题思考:

输入文章时,计算机怎样识别文章是否结束?输出文章时,怎样处理表示结束的字符?

解决方案:输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入 ^E,则退出输入。输出时文章时,如果tmp[strlen(tmp)-1]==5即发现表示结束的字符^E,用p->data[strlen(tmp)-1]='\\0'除去最后一个控制符 ^E。

2.算法改进:

本程序的文章为用户输入的文章,只能做即时输入的统计、编辑,而不能对已有的磁盘文件中的文章进行统计、编辑,如果引入文件流类,就可以打开磁盘文件,对其进行统计、编辑并保存,这是有待改进的。

参考文献:《上海交通大学网络教育数据结构协同作业实验线性表》、《数据结构指导书》等百度文库资料