输入一页文字,程序可以统计出文字、数字、空格的个数。
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;(4)画出模块之间的调用关系图;写出函数形式的算法框架。
请用数据结构编写,关系图,算法结构一定要有
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
typedef char TreeItem;
struct a
{
char ch[256];
}work[256];
typedef struct btnode *btlink ;
typedef struct btnode
{
TreeItem * word;//字符串 指针
btlink left , right , parent ;
int count;
} BtNode ;
typedef struct bstree *Tree ;
typedef struct bstree
{
btlink root ; // 根结点指针
}BSTree;
Tree T;
Tree Init()
{
T = (Tree)malloc(sizeof(T));
T->root = 0 ;
return T ;
}
btlink NewNode(char * x)
{
btlink p;
if((p=(btlink)malloc(sizeof(BtNode)))==0)
{
cout<<"开辟失败!"<<endl;
exit(0);
}
p->word=x;
p->left=0;
p->right=0;
p->parent=0;
p->count=1;
return p;
}
int less(char * x,char * y)
{
return (strcmp(x,y)<0);//x<y
}
void Search(TreeItem *x, btlink p )
{
while(p)
{
if( less(x,p->word) )
p = p->left ;
else if( less(p->word,x))
p=p->right;
else
break ;
}
if(p){
cout<<"有找到"<<x<<endl;
cout<<p->word<<"有"<<p->count<<"个"<<endl;;
}
else cout<<"没有找到"<<endl;
}
void InOrder(btlink t)
{
if(t)
{
InOrder(t->left);
cout<<"字符串:"<<t->word<<endl;
cout<<"个数:"<<t->count<<endl;
InOrder(t->right);
}
}
void Insert(char *x ,Tree T)
{
btlink p,r,pp=NULL ;
p = T->root ;
while( p )
{
pp = p ; // 保存父结点
// 通过和根结点比较,选择要搜索的子树
if(less(x,p->word))
p = p->left ;
else if(less(p->word,x))
p = p->right ;
else
{
p->count++;
return ;// 元素x已存在于字典中
}
}
r = NewNode(x);
if(T->root)
{
if(less(x,pp->word))
pp->left = r ;
else
pp->right = r ;
r->parent = pp ;
}
else
T->root = r ; // 插入空树
}
void open(Tree T)
{
char seps[]=" ,.\t\n;?:";
int k=0;
char *taken;
char filename[20];
FILE *fp;
cout<<"输入你所要打开的文件名:"<<endl;
cin>>filename;
cout<<endl;
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open file!\n");
exit(0);
}
while(!(feof(fp)))
{
fscanf(fp,"%s",work[k++].ch);//这里还真不能用char str【256】
taken=strtok(work[k-1].ch,seps);
while(taken!=NULL)
{
Insert(taken,T);
taken=strtok(NULL,seps);
}
}
fclose(fp);
}
void add()
{
char filename[20];
FILE *fp;
cout<<"输入你所要打开的文件名:"<<endl;
cin>>filename;
cout<<endl;
if((fp=fopen(filename,"a"))==NULL) //追加文本
{
printf("cannot open file!\n");
exit(0);
}
cout<< "输入要增加的内容 以@为结束"<<endl;
char ch;
getchar();
ch=getchar();
while(ch!='@')
{
fputc(ch,fp);
ch=getchar();
}
fclose(fp);
}