回 帖 发 新 帖 刷新版面

主题:数据结构课程设计-------文章编辑

[b][color=800000]文本编辑[/color][/b]
任务:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;
要求:
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1) 分行输出用户输入的各行字符;
(2) 分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";
(3) 输出删除某一字符串后的文章;
谢谢了!

[fly][color=800000]非常感谢!!![/color][/fly][email]wangsheng364@yahoo.com.cn[/email]

回复列表 (共31个回复)

11 楼

include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
#define OK              1
#define ERROR           -1
#define Elemtype        char
typedef struct _Stack
{
  Elemtype *Stack;
  struct _Stack *next;
}*linklist;
typedef struct
 {
  Elemtype *base;
  Elemtype *top;
  int stacksize;
  int EmptySpace;
 }SqStack;
SqStack S;
void InitStack()                                /*创建空的栈*/
 {
   S.base=(Elemtype *)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
   if(!S.base)
    exit(1);
   S.top=S.base;
   S.stacksize=STACK_INIT_SIZE;
   S.EmptySpace=STACK_INIT_SIZE;
 }


Elemtype GetTop()
 {                                                       /*返回头节点的内容*/
  Elemtype e;
  if(S.top==S.base) return ERROR;
  e=*(S.top-1);
  return e;
 }


void Push(Elemtype e)                        /*将e的内容加入到栈的顶部*/
 {
  if(S.EmptySpace<=0)
   {
    S.base=(Elemtype *)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(Elemtype));
    if(!S.base)exit(1);
    S.top=S.base+S.stacksize;
    S.stacksize+=STACKINCREMENT;
    S.EmptySpace=STACKINCREMENT;
   }
  *S.top++=e;
  S.EmptySpace--;
 }

void DestoryStack()                           /*销毁栈*/
{
  free(S.base);

}
void ClearStack()                             /*使栈的内容为空*/
{
 S.top=S.base;

}

void Pop()                                   /*删除栈的头节点*/
{

    if(S.top==S.base)
        exit(0);
    S.top--;
}

void BufferArea(linklist head)
{
 linklist term;
 linklist temp=head;
 term=(linklist)malloc(sizeof(struct _Stack));
 if(!term) {getch();exit(1);}               /*有问题,不用getch(),就是错误的,why?*/
 while(temp->next!=NULL)
  {
    temp=temp->next;
  }
  strcpy(term->Stack,S.base);
  temp->next=term;
  term->next=NULL;
  printf("%s\n",term->Stack);               /*有问题,把这个验证信息删除后程序就是错误的,郁闷!!*/
}



void PrintStack(linklist head)
{
  linklist _term;
  _term=head->next;
  while(_term!=NULL)
  {
    printf("%s",_term->Stack);
    printf("\n");
    _term=_term->next;
  }
}
void Save(linklist head)
{
 FILE *fp;
 linklist temp;
 char filename[20];
 temp=head->next;
 printf("please input the filename you want to save to\n");
 scanf("%s",filename);
 if((fp=fopen(filename,"w"))==NULL)
  exit(1);
  while(temp!=NULL)
  {
    fprintf(fp,"%s\n",temp->Stack);
    temp=temp->next;
   }
 } 

int main(void)
{
 /* 此处添加你自己的代码 */
    char ch;
    linklist head;

    head=(linklist)malloc(sizeof(struct _Stack));
    head->next=NULL;
    ch=getchar();
    InitStack();
    while(ch!=EOF)
    {
       while(ch!=EOF&&ch!='\n')
        {
            switch(ch)
            {
              case '#':{Pop();break;}
              case '@':{ClearStack();break;}
              default :{Push(ch);break;}
            }
        ch=getchar();
        }
     if(ch=='\n')
      {
       Push('\0');
       BufferArea(head);                          /*把数据从栈放到数据缓冲区*/
      }

        ClearStack(S);
        if(ch!=EOF)
            ch=getchar();
    }
    PrintStack(head);
    DestoryStack();
    Save(head);
  getch();
  return 0;
}

12 楼

行编辑器.c
/*define macro variables */
#define true 1
#define false 0

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>

#define STACK_INIT_SIZE 100   /* variables  in the save storage space  */
#define STACKINCREMENT 10     /*increment  of distribution in the save storage space */
typedef struct
    {
      char *base;  /*before and after the creating of the shed ,base is NULL */
      char *top;   /*shed pointer */
      int stacksize;   /*the save storage space distributive by  the element  */
    }SqStack;
SqStack S,q;

/*  construct a structuer array */
typedef struct {
    char cc[9999];
    int no;
}Array;

/* define the whole bureau varible*/
Array a[10000];
int m,n,i,j;
char name[40];
char t='\n';
FILE *fp;

/* construct an emputy shed*/
void InitStack()
{
    S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
    if(S.base==NULL)
       exit(1);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}

/* using character shed ,accept the data from the terminal */
void push(char e)
{
    if(S.top-S.base>=S.stacksize)
    {
        /* apply a new room */
        S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
        /* Attempts to shrink or expand the previously allocated block to size bytes.
           Returns the address of the reallocated block which can be different than the
           original address. If the block cannot be reallocated address. If the block 
           cannot be reakkocated or size == 0, realloc returns NULL.       */
        if (!S.base)
        exit(1);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    /* accept the next character */
    *S.top++=e;
}

/*  carry the whole data in the stack into the data section  */
char pop()
{
    char e;
    if(S.top==S.base)
        return false;
    e=*(--S.top);
    return e;
}

/* empty the data in the stack */
void ClearStack()
{
    S.top=S.base;  /* let  S.top and S.base point to the same place*/
}

/*destroy the stack  */
void DestroyStack()
{
    free(S.base);  /* free the data in the stack */
    S.top=S.base;
}

/*  judge the emputy of the shed */
int StackEmpty()
{
    if (S.top==S.base)
        return true;
    return false;
}

/* take out the data from the stack and the put in the stucter array*/
void Buffer() {
    n=0;
    m=1;
    /* move the data in the shade untill the stack is empty */
    while (S.top!=S.base)
    {
        n=n+1;
        a[m].no=a[m].no+1;
        a[m].cc[n]=*(S.top-1);
        S.top--;
    }
}

/* save the data */
void save() 
{
    printf("\n\nfile name:");
    scanf("%s",&name);
    fp=fopen(name,"wb");
    for (i=1;i<=m;i++) 
    {
        for (j=a[i].no;j>=1;j--) 
        {
            fwrite(&(a[i].cc[j]),1,1,fp);
        }
        fwrite(&t,1,1,fp);
    }
    fclose(fp);
}

/*main function*/
void main()
{
    char ch,e;
    printf("\n\n\n\t\t\t   welcome to use the  whole screen editor");
    printf("\n\n   press F6 if you want to save the file,you can save the file when you see\"^Z\" \n");
    printf("\n******************************************************************************\n\n");
 /*  SqStack S_stack,D_stack; */
    InitStack();
 /*  InitStack(D_stack); */
    ch=getchar();
    while(ch!=EOF)
    {
        while(ch!=EOF&&ch!='\n')
        {
            switch(ch)
            {
              case '#':e=pop();break;
              case '@':ClearStack();break;
              default:push(ch);break;
            }
        ch=getchar();
        }
        Buffer();
        ClearStack();
        if(ch!=EOF)
            ch=getchar();
    }
    save();
    DestroyStack();
}

13 楼

这个好象不是这个问题的源程序把,怎么看起来似乎没什么关联啊

14 楼


那位大哥有啊,我也要啊~
谢谢啦~油箱ghostzwn2008@126.com[em2][em2]

15 楼

我也急着要啊  哪位仁兄有请发到我邮箱weylen@126.com

16 楼

谁有啊  帮帮忙啊
www.caiwangapple@yahoo.com.cn

17 楼

怎么那么多人一起要得?莫非都是楼主的mj
为了增加人气?还是为了得到同情>

18 楼


有的话也帮我一下啊!谢谢了啊!我的邮箱是luchengcheng1020@126.com

19 楼


请教一下,对文字的统计有高见能让我学习一下吗?谢谢

20 楼

哪位高人可以对上面的题目给我 一点高见吗,谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册