文章编辑系统的设计与实现-创新互联
输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;
成都创新互联公司是专业的大关网站建设公司,大关接单;提供成都做网站、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大关网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!5.2问题分析和任务定义(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
(3)输出删除某一字符串后的文章;
5.3 数据类型和系统设计(1)存储结构设计
使用链表存储结构
(2)系统功能设计
- 建立文章编辑系统。输入所要编辑的文章,由函数ceatword()函数实现;
- 显示输入的文本,由函数printWord()实现;
- 统计英文字母数和空格数,以及整篇文章的总字数,由函数countWord()实现;
- 查找字符,由函数sreachWord()实现;
- 统计某一字符在文章中出现的次数和位置,由函数strcpy()实现;
- 删除字符,由函数DeleteWord()实现;
- 插入字符,由函数Insert Word()实现;
- 建立菜单;
#include
#include
typedef struct line //定义串结构
{
char *data; //定义指向字符的指针
struct line *next; //定义指向下一个结点的指针
}LINE;
(1)创建链表,向里面输入文本数据
void OutPut(LINE * &head) //向屏幕输出文字
{
LINE *p=head; //定义指针p
do{
printf("%s\n",p->data);
}
while((p=p->next)!=NULL); //遍历链表
printf("\n");
}
(2)主函数
void menu(){
printf("***********编辑指令***********\n");
printf("1:统计文章中总字符数 \n");
printf("2:统计文章中空格个数 \n");
printf("3:统计文章中数字个数 \n");
printf("4:统计文章中英文字母数 \n");
printf("5:删除文章中指定字符串 \n");
printf("6:统计文章中指定字符串出现次数\n");
printf("******************************\n");
}
void Create(LINE * &head)
{
printf ("请输入文章,每行最多80个字符,以Ctrl+E(^E)为结束符\n");
LINE *p=new LINE; //首先为链表建立一个附加表头结点
head=p; //将付给表头指针
char tmp[100];
while(1)
{
gets(tmp); //输入字符串
if(strlen(tmp)>80)
{
printf("每行最多输入80个字符!");
break;
}
if(tmp[0]==5)break; //如果发现输入^E,则退出输入
p=p->next=new LINE;
p->data=new char[strlen(tmp)+1]; //为结点分配空间
strcpy(p->data,tmp);
if(tmp[strlen(tmp)-1]==5) //除去最后一个控制符^E
{
p->data[strlen(tmp)-1]='\0';
break;
}
}
p->next=NULL; //最后一个指针为空
head=head->next;
printf("\n");
menu();
}
(3)统计英文字母数
void CountLetter(LINE * &head) //统计英文字母数
{
LINE *p=head;
int count=0;
do{
int Len=strlen(p->data); //计算当前data里的数据元素个数
for(int i=0;i if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z')) count++; } //计算字母数 while((p=p->next)!=NULL); //遍历链表 printf("文章中英文字母个数: %d \n", count);//返回文章里 printf("******************************\n"); printf("\n"); menu(); } (4)统计数字数 void CountNumber(LINE * &head) { LINE *p=head; int count=0; do{ int Len=strlen(p->data); for(int i=0;i if(p->data[i]>=48 && p->data[i]<=57)count++; } while((p=p->next)!=NULL); printf("文章中数字个数: %d \n",count); printf("******************************\n"); printf("\n"); menu(); } (5)统计空格数 void CountSpace(LINE * &head) { LINE *p=head; int count=0; do{ int Len=strlen(p->data); for(int i=0;i if(p->data[i]==32)count++; } while((p=p->next)!=NULL); printf("文章中空格个数: %d \n", count); printf("******************************\n"); printf("\n"); menu(); } (6)显示所有字母的个数 void CountAll(LINE * &head) { LINE *p=head; int count=0; do{ count+=strlen(p->data); } while((p=p->next)!=NULL); printf("文章总字数: %d \n",count); printf("******************************\n"); printf("\n"); menu(); } (7)寻找字符串 void FindString(LINE * &head) { LINE *p=head; int count=0; int len1=0; int len2; int i,j,k; char str1[20]; printf("\n"); printf("请输入要统计的字符串:"); scanf("%s",str1); len2=strlen(str1); do { len1=strlen(p->data); for(i=0;i { if(p->data[i]==str1[0]) { k=0; for(j=0;j if(p->data[i+j]==str1[j]) k++; if(k==len2) {count++;i=i+k-1;} } } } while((p=p->next)!=NULL);//遍历链表 printf("该字符串在文中出现的次数: %d \n",count); printf("******************************\n"); printf("\n"); menu(); } (8)删除目标字符串 void delstringword(char *s,char *str) //删除指定的字符串 { //*s为输入的字符串,*str为将要删除的字符 char *p=strstr(s,str); //从字符串中寻找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 for(int n=j;n tmp[count]='\0'; strcpy(s,tmp); } void DelString(LINE * &head) { LINE *p=head; char str[20]; printf("请输入要删除的字符串: "); scanf("%s",str); do { if(strstr(p->data,str)!=NULL)delstringword(p->data,str); } while((p=p->next)!=NULL); printf("删除指定字符串后的文章为: \n"); OutPut(head); printf("******************************\n"); printf("\n"); menu(); } int main() { LINE *head; int i; Create(head); for(;;) { printf("执行指令: "); scanf("%d",&i); switch(i) { case 1:CountAll(head);break; case 2:CountSpace(head);break; case 3:CountNumber(head);break; case 4:CountLetter(head);break; case 5:DelString(head);break; case 6:FindString(head);break; default:printf("指令输入错误\n\n"); } } } 1.输入文章: 2.进行功能操作 你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享标题:文章编辑系统的设计与实现-创新互联
标题URL:http://cdiso.cn/article/cdpiec.html