⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 文章编辑源程序.cpp

📁 C++写的数据结构课程设计:文章编辑器
💻 CPP
字号:
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"

#define MAXSIZE 80

typedef struct LineNode
{char *data;//字符串指针需要时 动态分配内存
 struct LineNode *next;
}LineNode,*Line;

void CreatTxt(Line &head) //创建链表,同时向里面输入文本数据
{Line p;
 char a[MAXSIZE];
 int flag=1;
 p=(Line)malloc(sizeof(LineNode));
 head=p;
 printf("\n请输入文档,每行最多输入80个字符(输入字符#结束):\n");
 while(flag)
  { p=p->next=(Line)malloc(sizeof(LineNode));
   gets(a);
   p->data=(char *)malloc((strlen(a)+1)*sizeof(char));
   strcpy(p->data,a);
   if(p->data[strlen(a)-1]=='#')
      {    //除去最后一个控制符 #
         p->data[strlen(a)-1]='\0';
         flag=0;
       }
   }
   p->next=NULL;  //使最后的一个指针为空。
}
 
int Count_Space(Line head)
{ //统计空格数
    Line p=head->next;
    int count=0;
    while(p)
    {   int Len=strlen(p->data);    //计算当前 data 里的数据元素的个数
        for(int i=0;i<Len;i++)
        if(p->data[i]==' ')count++;  //计算空格数
        p=p->next; //指针下移
    }
        return count;
}

int Count_Num(Line head)
{   //统计数字 数
    Line p=head->next;
    int count=0;
    while(p)
    {   int Len=strlen(p->data);           //计算当前 data 里的数据元素的个数
        for(int i=0;i<Len;i++)
        if(p->data[i]>=48 && p->data[i]<=57)count++;  //计算数字数
        p=p->next;    //指针下移
    }
       return count;
}


int Count_All_Word(Line head)
{  //统计文章的总字数
    Line p=head->next;  //保存链表的首地址
    int count=0;   //总字母数
    while(p)
    {count+=strlen(p->data);  //计算当前行内的字符数
    p=p->next;    //指针下移
    }
    return count;
}

int Count_ZM(Line &head)
{  //  统计字母数
    int count=Count_All_Word(head); //总的字符数,包含空格
    int space_count=Count_Space(head); //空格数
    int num_count=Count_Num(head);//数字数 
    return count-space_count-num_count;  //返回文章的字母总数
}

int Find_Word(Line head,char *sch)
{ //统计 sch 在文章中出现的次数
    Line p=head->next;
    int count=0;
    int h=0;
    int i,j,k;
    int len1=0; //保存当前行的总字符数
    int len2=strlen(sch); //待统计字符串的长度
    while(p)
    { len1=strlen(p->data);//当前行的字符数
     for(i=0;i<len1;i++)
      {  if(p->data[i]==sch[0])
            {  k=0;
                for(j=0;j<=len2-1;j++)
                    if(p->data[i+j]==sch[j]) k++;
            if(k==len2) {count++;i=i+k-1;}
      }
    }
     p=p->next;   //指针下移
    }
    return count;
}

void del_string(char *s,char *sch)
{
    // *s为输入的字符串
    // *sch 为将要删除的字符
    int k,m;
    char *p=strstr(s,sch);    //在串s中查找串sch的第一次出现
    char tmp[MAXSIZE];
    int len=strlen(s);
    int i=len-strlen(p);
    int j=i+strlen(sch);
    int count=0;
    for(k=0;k<i;k++)tmp[count++]=s[k];
    for(m=j;m<len;m++)tmp[count++]=s[m];
    tmp[count]='\0';

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

void Del_String(Line &head,char *sch)
{ //删除指定的字符串
    Line p=head->next;
    while(p)
    {
        if(strstr(p->data,sch)!=NULL)del_string(p->data,sch);

    p=p->next;    //遍历 链表
   }
}


void OutPutTxt(Line &head)
{ //向屏幕输出文本
    Line p=head->next;
    while(p)
    {puts(p->data);
     p=p->next;
    }
}


void TxtTJ(Line head)
{ //统计

   printf("\n文章统计信息结果如下:\n");
   printf("\n文章中的字母数:%d\n",Count_ZM(head));
   printf("\n文章中的空格数:%d\n",Count_Space(head));
   printf("\n文章中的数字数:%d\n",Count_Num(head));
   printf("\n文章中的总字数:%d\n",Count_All_Word(head));

}

int menu()   //菜单函数
{int d;
printf("\n::::::::数据结构----文本编辑::::::::\n");
 printf("\n:::::1--输入文本   2--显示文本::::::\n");
 printf("\n:::::3--文本统计   4--统计子串::::::\n");
 printf("\n:::::5--删除子串   按其他键退出:::::\n");
 printf("\n::::::::::::::::::::::::::::::::::::\n");
scanf("%d",&d);
return(d);
}

int main()
{Line head;
 int 
 j=1;
 char b[MAXSIZE];
 
 while(j)
 {
  switch(menu())
  {case 1:CreatTxt(head);break;
   case 2:printf("\n输出文本:\n");
          OutPutTxt(head);break;
   case 3:TxtTJ(head);break;
   case 4:{printf("请输入要统计的子串:");
           getchar();
           gets(b);
           printf("该子串在文本中出现的次数为%d",Find_Word(head,b));
           break; }
   case 5:{printf("\n请输入要删除的子串:");
           getchar();
           gets(b);
           Del_String(head,b);
           printf("\n输出删除该子串后的文本:\n");
           OutPutTxt(head);
           break;}
   default:j=0;
  }
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -