内容发布更新时间 : 2024/12/29 23:46:58星期一 下面是文章的全部内容请认真阅读。
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.算法改进: 本程序的文章为用户输入的文章,只能做即时输入的统计、编辑,而不能对已有的磁盘文件中的文章进行统计、编辑,如果引入文件流类,就可以打开磁盘文件,对其进行统计、编辑并保存,这是有待改进的。 参考文献:《上海交通大学网络教育数据结构协同作业实验线性表》、《数据结构指导书》等百度文库资料