C語言實(shí)現(xiàn)簡(jiǎn)易文本編譯器
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)之簡(jiǎn)易文本編譯器(C語言實(shí)現(xiàn))
需求分析
(1)具有圖形菜單界面:顯示實(shí)時(shí)年份,日期,星期及時(shí)間
(2)
查找:查找文本中的字符串,顯示其出現(xiàn)的行數(shù),列數(shù)及總共出現(xiàn)次數(shù)
替換(等長(zhǎng),不等長(zhǎng)):對(duì)文本中的文本實(shí)現(xiàn)等長(zhǎng)及不等長(zhǎng)替換
插入(插串,文本塊的插入):插入一行或在具體行號(hào)列號(hào)處插入文本
塊移動(dòng)(行塊,列塊移動(dòng)):向下移動(dòng)一行,向上移動(dòng)一行,
具體行號(hào)列號(hào)處向左移動(dòng)或向右移動(dòng)
刪除:刪除一行,刪除莫一行,莫列,定長(zhǎng)的內(nèi)容
(3)可正確存盤、取盤;:可讀取,保存文本;
(4)正確顯示總行數(shù)。(行數(shù)不少于5行,每行字符數(shù)不少于80個(gè)字符)
采用的數(shù)據(jù)結(jié)構(gòu)
1:采用的邏輯結(jié)構(gòu)
文本編輯器主要是針對(duì)文本進(jìn)行編輯,文本的操作就是對(duì)字符的操作。文本編輯器可以從行、
列兩個(gè)方向進(jìn)行編輯。
每一行可以看成一個(gè)線性表,線性表是一種線性結(jié)構(gòu),線性結(jié)構(gòu)的特點(diǎn)是數(shù)據(jù)元素之間為線性
關(guān)系,據(jù)元素“一個(gè)接一個(gè)的排列”。在一個(gè)線性表中數(shù)據(jù)元素的類型是相同的,由于每一行
可以存儲(chǔ)的最大字?jǐn)?shù)是相同的,行方向所有線性表的最大長(zhǎng)度可以設(shè)置成相同的。行與行之間
的關(guān)系也可以看成一個(gè)線性表。
2.采用的存儲(chǔ)結(jié)構(gòu)
線性表的存儲(chǔ)分為兩種:順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)。
順序存儲(chǔ)是指在內(nèi)存中用地址連續(xù)的一塊存儲(chǔ)空間順序存放線性表的各元素,用這種存儲(chǔ)形式
存儲(chǔ)的線性表稱為順序表。在程序設(shè)計(jì)語言中,一維數(shù)組在內(nèi)存中占用的存儲(chǔ)空間就是一組連續(xù)
的存儲(chǔ)區(qū)域,因此,用一維數(shù)組來表示順序表的數(shù)據(jù)存儲(chǔ)區(qū)域是再合適不過的。
鏈?zhǔn)酱鎯?chǔ)是通過-組任意的存儲(chǔ)單元來存儲(chǔ)線性表中的數(shù)據(jù)元素的,為建立數(shù)據(jù)元系之間的線性
關(guān)系對(duì)每個(gè)數(shù)據(jù)元素除了存放數(shù)據(jù)元素自身的信息之外,還需要和一起存放其后繼或前驅(qū)所在的
存儲(chǔ)單元的地址,這兩部分信息組成一個(gè)“結(jié)點(diǎn)”,每個(gè)元素都如此。存放數(shù)據(jù)元素信息的稱為
數(shù)據(jù)域,存放其前驅(qū)或后繼地址的稱為指針域。只有一個(gè)存儲(chǔ)單元地址的為單鏈表,有兩個(gè)存儲(chǔ)
單元地址的為雙鏈表。
考慮到實(shí)際的功能需求,每行的線性表可以用順序存儲(chǔ)方式,每個(gè)字符是一個(gè)節(jié)點(diǎn)。用數(shù)組的長(zhǎng)
度表示本行可以輸入的最大字符。行與行之間的線性表采用雙鏈表存儲(chǔ),每個(gè)節(jié)點(diǎn)包括四個(gè)區(qū)域,
一個(gè)指針域prior指向上一行,一個(gè)指針域next指向下一行,一個(gè)數(shù)據(jù)域num是行號(hào),一個(gè)數(shù)據(jù)
域是本行的字符數(shù)組。程序以行和列標(biāo)識(shí)文本位置,行采用雙向鏈表存儲(chǔ)行信息,用數(shù)組下標(biāo)標(biāo)識(shí)
列信息,從而能夠準(zhǔn)確定位字符位置,然后進(jìn)行查找、替換、插入、塊移動(dòng)、刪除等多種操作。
函數(shù)功能模塊圖:

定義的結(jié)構(gòu)體:
struct line
{
char text[MAX_LEN]; //本行的文本
int num; //行號(hào)
struct line *next; //指向下一行的指針
struct line *prior; //指向前一行的指針
};
代碼如下(僅供參考)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define MAX 240
#define NOT_FOUND -1
//函數(shù)聲明
void HeadWord(void); //輸出大標(biāo)題,永遠(yuǎn)出現(xiàn)在程序的最頂端。
void PrintWord(void); //輸出文本的內(nèi)容
void printf_time(); //輸出時(shí)間和日期,星期及年月日
void scanf_load(); //從鍵盤錄入文本
void file_load(); //把文本文件的內(nèi)容讀到線性表中
void findstr(); //查找字符串
void delete1(int linenum);//刪除一行
void delete2(int linenum,int position,int lenth);//刪除莫一行,莫列,定長(zhǎng)的內(nèi)容
void insert1(); // 插入一行文字
void insert2(char str[], int linenum, int position);//插入文字到文本莫一行莫一列
void replace(); //替換
void Mainmenu(); //主菜單
void menu1(); //文件錄入方式菜單
void menu2(); //文本內(nèi)容處理菜單
void menu_move(); //移動(dòng)菜單
//定義結(jié)構(gòu)體
struct line
{
char text[MAX]; //該行的內(nèi)容
int num; //用來記錄行號(hào)
struct line *prior; //用來指向前一行
struct line *next; //用來指向下一行
};
struct line *start; //指向線性表的第一行
struct line *last; //指向線性表的最后一行
//主函數(shù)
int main()
{
Mainmenu();
return 0;
}
//輸出標(biāo)題,永遠(yuǎn)出現(xiàn)在程序的最頂端。
void HeadWord()
{
printf("\t\t ____________________________________________________\n\n");
printf("\t\t**** Welcom to use our TXT edition system! ****\n");
printf("\t\t ____________________________________________________\n");
}
// 輸出鏈表的內(nèi)容
void PrintWord()
{
struct line *p = start;
while(p != last)
{
printf("\n\t\t第%d行|%s",p->num,p->text);
p = p->next;
}
printf("\n\t\t第%d行|%s",last->num,last->text);
printf("\n");
}
//輸出時(shí)間和日期
void printf_time()
{
time_t timep;
struct tm *p;
time (&timep);
p=gmtime(&timep);
//年月日
printf("\t\t|Data:%d-%d-%d |",1900+p->tm_year,1+p->tm_mon,p->tm_mday);
//顯示星期幾
printf("Today is ");
switch (p->tm_wday)
{
case 7:
printf("Sunday |");
break;
case 1:
printf("Monday |");
break;
case 2:
printf("Tuesday |");
break;
case 3:
printf("Wednesday|");
break;
case 4:
printf("Thursday |");
break;
case 5:
printf(" Friday |");
break;
case 6:
printf("Saturday |");
break;
default:
break; }
//讓時(shí)間固定顯示為 08:04:11類型,即當(dāng)時(shí),分,秒小于十時(shí)前加零
if(p->tm_hour+8<10&&p->tm_min>10&&p->tm_sec>10)
printf("Time:0%d:%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8<10&&p->tm_min<10&&p->tm_sec>10)
printf("Time:0%d:0%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8<10&&p->tm_min<10&&p->tm_sec<10)
printf("Time:0%d:0%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8>=10&&p->tm_min<10&&p->tm_sec<10)
printf("Time:%d:0%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8>=10&&p->tm_min>=10&&p->tm_sec<10)
printf("Time:%d:%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8>=10&&p->tm_min>=10&&p->tm_sec>=10)
printf("Time:%d:%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8>=10&&p->tm_min<10&&p->tm_sec>=10)
printf("Time:%d:0%d:%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
else if(p->tm_hour+8<10&&p->tm_min>=10&&p->tm_sec<10)
printf("Time:0%d:%d:0%d |",p->tm_hour+8,p->tm_min,p->tm_sec);
}
//把文本文件的內(nèi)容讀到線性表中
void file_load()
{
struct line *info,*temp; //行指針,info指向當(dāng)前行,temp指向info的前驅(qū)行
char ch;
temp = NULL;
int linenum,i; //行計(jì)數(shù)器,行字符數(shù)組下標(biāo)
FILE *fp; //文件指針
char name[20];
printf("請(qǐng)輸入要打開文件名字(例如c:\\a.txt)");
scanf("%s",name);
while ((fp=fopen(name,"r"))==NULL)
{
printf("\n打開文件失敗,請(qǐng)重新輸入要打開的文件名:");
scanf("%s",name);
}
start = (struct line*)malloc(sizeof(struct line)); //生成一行的結(jié)點(diǎn)空間
info = start;
linenum = 1;
while((ch = fgetc(fp)) != EOF)
{
i = 0;
info->text[i] = ch;
i++;
while((ch = fgetc(fp)) != '\n') //從文件中讀到一行字符到線性表中
{
info->text[i] = ch;
i++;
}
info->num = linenum++;
info->next = (struct line*)malloc(sizeof(struct line));
if (!info->next)
{
printf("\n\t\t內(nèi)存不足");
getchar();
exit(0);
}
temp = info;
info = info->next;
info->prior = temp;
}
last = info->prior;
printf("\t\t文件讀入完畢\n");
fclose(fp);
}
//從鍵盤錄入文本
void scanf_load()
{
struct line *info,*temp; //行指針,info指向當(dāng)前行,temp指向info的前驅(qū)行
char ch;
temp = NULL;
int linenum,i; //行計(jì)數(shù)器,行字符數(shù)組下標(biāo)
FILE *fp; //文件指針
temp = NULL;
start = (struct line*)malloc(sizeof(struct line)); //生成一行的結(jié)點(diǎn)空間
info = start;
linenum = 1;
printf("\t\t請(qǐng)從鍵盤錄入文本(輸入時(shí)回車換行,輸入結(jié)束后在新的一行輸入#結(jié)束錄入)\n\t\t");
while((ch = getchar()) !='#')
{
i = 0;
info->text[i] = ch;
i++;
while((ch = getchar()) != '\n') //從文件中讀到一行字符到線性表中
{
info->text[i] = ch;
i++;
}
printf("\t\t");
info->text[i] = '\0';
info->num = linenum++;
info->next = (struct line*)malloc(sizeof(struct line));
if (!info->next)
{
printf("\n\t\t內(nèi)存不足");
getchar();
exit(0);
}
info->prior = temp;
temp = info;
info = info->next;
}
temp->next = NULL;
last = temp;
free(info);
start->prior = NULL;
}
//文件保存
void save()
{
system("cls");
FILE *fp;
line *info=start;
int i=0;
char name[20];
printf("\n請(qǐng)輸入保存地址(例如: c:\\a.txt):");
scanf("%s",name);
while ((fp=fopen(name,"w+"))==NULL)
{
printf("文件不存在,請(qǐng)重新輸入文件名:");
scanf("%s",name);
}
while(info)
{
while(info->text[i]!='\n')
{fprintf(fp,"%c",info->text[i]);
i++;
}
info = info->next;
i = 0;
}
fclose(fp);
printf("\n文件保存成功\n");
}
//查找字符串
void findstr(){
PrintWord();
char str[MAX];
getchar();
printf("\t\t 輸入想要查找的字符串:");
gets(str);
printf("\t\t|>>________________________________________________<<|\n");
struct line *info;
int i = 0, find_len, found = 0, position;
char substring[MAX];
info = start;
int find_num = 0; //匹配到的次數(shù)
find_len = strlen(str);
while (info) //查詢
{
i = 0; //行間循環(huán)
while (i <= (strlen(info->text) - find_len)) //行內(nèi)查找循環(huán)
{ int k=0;
for(int j=i;j<i+find_len;j++) // 行內(nèi)的字符串從第一個(gè)開始按定長(zhǎng)find_len賦給substring
{
substring[k] = info->text[j];
k++;
}
if (strcmp(substring,str) == 0)
{
find_num++;
printf("\t\t|第%d次出現(xiàn)在:%d行%d列\(zhòng)n",find_num,info->num,(i+1+1)/2);
found = 1;
}
i++;
}
info = info->next;
}
if (found) //查找成功
printf("\t\t|\t\t該內(nèi)容出現(xiàn)的總次數(shù)為%d\n",find_num);
else //查找不成功
printf("\t\t該內(nèi)容不存在\n");
printf("\t\t|>>________________________________________________<<|\n");
}
//刪除一行
void delete1(int line_num)
{
struct line * info, *p;
info = start;
while ((info->num < line_num) && info) //尋找要?jiǎng)h除的行
info = info->next;
if (info == NULL)
printf("該行不存在");
else
{
p = info->next; //指向要?jiǎng)h除的行后面一行
if (start == info) //如果刪除的是第一行
{
start = info->next;
if (start) //如果刪除后,不為空
start->prior = NULL;
else //刪除后為空
last = NULL;
}
else
{
info->prior->next = info->next; //指定行的上一行指向指定行的下一行
if (info != last) //如果不是最后一行
info->next->prior = info->prior; //修改其下一行的指向頭的指針
else //如果是最后一行,修改尾指針
last = info->prior;
}
free(info);
while (p) //被刪除行之后的行號(hào)減一
{
p->num = p->num - 1;
p = p->next;
}
}
}
//刪除莫一行,莫列,定長(zhǎng)的內(nèi)容
void delete2(int line_num,int position,int lenth)
{
struct line *info=start;
char rest_str[MAX];
if(line_num == 1)
info = start;
else
for(int i=1;i<line_num;i++) //讓info指向刪除內(nèi)容所在行
info = info->next;
if (info == NULL)
printf("該行沒有字符!n");
else
{
if (strlen(info->text) <= (position + lenth)) //本行的字符長(zhǎng)度<=待刪除的列號(hào)+刪除長(zhǎng)度,直接在當(dāng)前位置插入'\0'
info->text[position] = '\0';
else
{ int i;
for(i = position-1;info->text[i+lenth]!='\0';i++)
info->text[i]=info->text[i+lenth];
info->text[i]='\0';
}
}
}
// 插入一行文字
void insert1()
{
int linenum;
printf("\t\t輸入插入位置的行號(hào):");
scanf("%d", &linenum);
struct line * info, * q, * p;
p = start;
q = NULL;
while (p && p->num != linenum)
{
q = p; //插入行前面一行
p = p->next; //插入行后面一行
}
if (p == NULL && (q->num + 1) != linenum) //指定行不存在,不能插入
{
printf("\t\t輸入的行號(hào)不存在");
}
else // 指定行存在,進(jìn)行插入
{
info = (struct line *)malloc(sizeof(struct line));
printf("\t\t輸入要插入的字符串:");
scanf("%s", info->text);
info->num = linenum;
if (linenum == 1) //插入在第一行
{
info->next = p;
p->prior = info;
info->prior = NULL;
start = info;
}
else if (q->num != linenum) //插入在最后一行
{
q->next = info;
info->next = p;
info->prior = q;
}
else //插入在其他行
{
q->next = info;
info->next = p;
p->prior = info;
info->prior = q;
}
while (p) //如果不是插入在最后一行,插入行后面的行號(hào)都加1
{
p->num = p->num + 1;
p = p->next;
}
}
}
//插入文字到文本莫一行莫一列
void insert2(char str[], int linenum, int position)
{
struct line * info;
int len, i;
int lenth;
char rest_str[MAX],kongge[2] = { " " };
info = start;
while (info && info->num != linenum) //查詢要插入的行
{
info = info->next;
}
if (info == NULL)
printf("不存在該行!\n");
else if (position < 0)
printf("不存在該列!\n");
else //如果行和列都存在,則進(jìn)行插入
{
lenth = strlen(info->text);
if (lenth < position) //插入列大于本行文件列數(shù)
{
len = position - lenth - 1;
for (i = 0; i < len; i++)
strcat(info->text, kongge); //將空余的部分插入空格符
strcat(info->text, str); //插入字符到列的未尾
}
else //插入列在本行文字的中間
{
strcpy(rest_str, &info->text[position - 1]);
strcpy(&info->text[position - 1], str);
strcat(info->text, rest_str);
}
}
}
//替換
void replace()
{
PrintWord();
char str[MAX];
printf("\t\t輸入想要替換的字符串:\t\t");
scanf("%s",&str);
char replace[MAX];
printf("\t\t替換為:");
scanf("%s",&replace);
struct line *info;
int i = 0, find_len, found = 0, position;
char bijiao[MAX];
info = start;
int find_num = 0; //匹配到的次數(shù)
find_len = strlen(str);
while (info) //查詢
{
i = 0; //行間循環(huán)
while (i <= (strlen(info->text) - find_len)) //行內(nèi)查找循環(huán)
{ int k=0;
for(int j=i;j<i+find_len;j++) // 行內(nèi)的字符串從第一個(gè)開始按定長(zhǎng)find_len賦給substring
{
bijiao[k] = info->text[j];
k++;
}
if (strcmp(bijiao,str) == 0)
{
find_num++;
delete2(info->num,i+1,find_len);
insert2(replace,info->num,i+1);
found = 1;
}
i++;
}
info = info->next;
}
if (found) //查找成功
printf("\t\t該內(nèi)容替換的總次數(shù)為%d\n",find_num);
else //查找不成功
printf("\t\t該內(nèi)容不存在\n");
printf("\t\t經(jīng)過替換后的內(nèi)容為:\n");
PrintWord();
}
//文件錄入方式菜單
void menu1()
{
printf("\t\t|請(qǐng)選擇錄入方式 1:從鍵盤輸入 2:從文件錄入 |\n\t\t");
int i;
scanf("%d",&i);
getchar();
if(i>2||i<1)
{
printf("\t\t對(duì)不起,請(qǐng)輸入正確的功能序號(hào)!\n");
}
switch(i)
{
case 1:
scanf_load();
system("cls");
break;
case 2:
file_load();
system("cls");
break;
}
}
//移動(dòng)菜單
void menu_move()
{
int choice;
printf("\n\t\t|_____________________移動(dòng)操作_______________________|\n");
printf("\n\t\t|----->1. 向下移動(dòng)一行 <-----------|\n");
printf("\t\t|----->2. 向上移動(dòng)一行 <-----------|\n");
printf("\t\t|----->3. 向右移動(dòng)一列 <-----------|\n");
printf("\t\t|----->4. 向左移動(dòng)一列 <-----------|\n");
printf("\t\t|----->5. 返回上級(jí)菜單 <-----------|\n");
printf("\t\t請(qǐng)選擇");
scanf("%d",&choice);
int line_num,number;
char str[2];
switch (choice)
{
case 1: // 向下移動(dòng)一行
printf("\t\t輸人要移動(dòng)的字符串所在行號(hào):");
scanf("%d", &line_num);
struct line *info,*p; //新建一行空行
info = (struct line *)malloc(sizeof(struct line));
info->text[0] = ' ';
info->text[1] = '\0';
info->num = line_num;
if (line_num == 1) //插入在首行
{
info->next = start;
start->prior = info;
start = info;
start->prior = NULL;
p=start->next;
}
else //插入在其他行
{
p=start;
while (p->num != line_num)
p = p->next; //令p指向插入行
info->next=p;
info->prior=p->prior;
p->prior->next=info;
p->prior = info;}
while (p) //插入行后面的行號(hào)都加1
{
p->num = p->num + 1;
p = p->next;
}
break;
case 2: //向上移動(dòng)一行
printf("\t\t輸入要移動(dòng)的字符串所在行號(hào):");
scanf("%d",&line_num);
delete1(line_num-1);
break;
case 3: //向右移動(dòng)一列
printf("\t\t輸人要移動(dòng)的字符串所在行號(hào):");
scanf("%d", &line_num);
printf("\t\t輸入要移動(dòng)的字符串所在列號(hào):");
scanf("%d", &number);
str[0] = ' ';
str[1] = '\0';
insert2(str, line_num, number);
break;
case 4: //向左移動(dòng)
printf("\t\t輸入要移動(dòng)的字符串所在行號(hào):");
scanf("%d", &line_num);
printf("\t\t輸入要移動(dòng)的字符串所在列號(hào):");
scanf("%d", &number);
if (number <= 0)
printf("\t\t該列不存在");
else
delete2(line_num, number - 2, 1);
break;
case 5: //退出移動(dòng)
break;
}
}
//文本內(nèi)容處理菜單
void menu2()
{
char str1[20];
char str2[20];
int a;
do
{
HeadWord();
printf_time();
printf("\n\t\t ____________________________________________________\n");
printf("\t\t| 文章內(nèi)容處理菜單 |\n");
printf("\t\t|____________________________________________________|\n");
printf("\t\t|----> 1、查找文章中的字符或者字符串 |\n");
printf("\t\t|----> 2、刪除文章中的字符或者字符串 |\n");
printf("\t\t|----> 3、向文章中插入字符或者字符串 |\n");
printf("\t\t|----> 4、移動(dòng)文章字符或字符串 |\n");
printf("\t\t|----> 5、替換文章字符或字符串 |\n");
printf("\t\t|----> 6、返回主菜單 |\n");
printf("\t\t|----> 7、直接退出系統(tǒng) |\n");
printf("\t\t|____________________________________________________|\n");
printf("\t\t 請(qǐng)選擇:");
scanf("%d",&a);
switch(a)
{
case 1:
system("cls");
HeadWord();
findstr();
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
case 2:
system("cls");
HeadWord();
printf("\t\t| 1:刪除一行文字 2:刪除莫一行,莫列,定長(zhǎng)的內(nèi)容|\n\t\t");
int delete_choice;
scanf("%d",&delete_choice);
getchar();
if(delete_choice == 1)
{
int linenum;
printf("\t\t當(dāng)前文本為:\n");
PrintWord();
printf("\t\t請(qǐng)輸入你刪除行的行號(hào):");
scanf("%d",&linenum);
getchar();
delete1(linenum);
}
else if(delete_choice == 2)
{
int linenum, position,lenth; //行,列,刪除長(zhǎng)度
printf("\t\t當(dāng)前文本為:\n");
PrintWord();
printf("\t\t請(qǐng)輸入要?jiǎng)h除內(nèi)容所在行,列,刪除內(nèi)容字節(jié)長(zhǎng)度,中間用空格隔開\n");
printf("\t\t--->注意:漢字占兩個(gè)字節(jié)\n\t\t");
scanf("%d %d %d",&linenum,&position,&lenth);
position = (position*2)-1;
getchar();
delete2(linenum,position,lenth);
}
printf("\t\t刪除后的文章為:\n");
PrintWord();
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
case 3:
system("cls");
HeadWord();
printf("\t\t| 1:插入一行文字 2:插入文字到文本到一行的中間|\n\t\t");
int insert_choice;
scanf("%d",&insert_choice);
if(insert_choice == 1)
{
printf("\t\t當(dāng)前文本為:\n");
PrintWord();
insert1();}
else
{
printf("\t\t當(dāng)前文本為:\n");
PrintWord();
char str[MAX]; int linenum; int position;
printf("\t\t輸入插入位置一行號(hào):");
scanf("%d", &linenum);
printf("\t\t輸入插入位置-列號(hào):");
scanf("%d", &position);
position = (position*2)-1;
printf("\t\t要插入的字符串:");
scanf("%s", str);
insert2(str,linenum,position);
}
printf("\t\t插入字符或字符串后文章為:\n");
PrintWord();
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
case 4:
system("cls");
HeadWord();
printf_time();
menu_move();
printf("\t\t移動(dòng)后文本內(nèi)容為:\n");
PrintWord();
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
case 5:
system("cls");
HeadWord();
printf_time();
replace();
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
}
if(a==6)
{
system("cls");
break;
}
if(a==7) exit(0);
}while(1);
}
//主菜單
void Mainmenu()
{
printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n");
printf("\n\n\t\t\t 歡迎您使用簡(jiǎn)易文本編輯器!\n");
printf("\n\n\n\n\n\n\n\n\npress Enter to continue...");
getchar();
system("cls");
int t;
do{
HeadWord();
printf_time();
printf("\n");
printf("\t\t ____________________________________________________\n");
printf("\t\t| 主菜單 |\n");
printf("\t\t| |\n");
printf("\t\t|----> 1、輸入文章內(nèi)容 |\n");
printf("\t\t|----> 2、進(jìn)入文章內(nèi)容處理菜單 |\n");
printf("\t\t|----> 3、顯示當(dāng)前文章內(nèi)容 |\n");
printf("\t\t|----> 4、保存文本 |\n");
printf("\t\t|----> 5、退出文本編輯器 |\n");
printf("\t\t| |\n");
printf("\t\t| 注:第一次運(yùn)行本程序時(shí)請(qǐng)選擇功能1 |\n");
printf("\t\t|____________________________________________________|\n");
printf(" \t\t 請(qǐng)選擇:");
scanf("%d",&t);
if(t>5||t<1)
{
printf("對(duì)不起,無此功能,請(qǐng)輸入正確的功能序號(hào)!\n");
}
else
switch(t)
{
case 1:
system("cls");
HeadWord();
menu1();
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
case 2:
system("cls");
menu2();
break;
case 3:
system("cls");
HeadWord();
printf_time();
printf("\n\t\t ____________________文章內(nèi)容為______________________\n");
PrintWord();
printf("\n");
printf("\t\t按回車鍵繼續(xù)·····");
getchar();
getchar();
system("cls");
break;
case 4:
HeadWord();
save();
break;
}
if(t==5) break;
}while(1);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言中static與extern關(guān)鍵字的深入解析
在C語言編程中,static和extern是兩個(gè)非常重要的關(guān)鍵字,它們各自有著獨(dú)特的用途,本文將深入探討這兩個(gè)關(guān)鍵字的工作原理、底層實(shí)現(xiàn)機(jī)制以及在實(shí)際開發(fā)中的應(yīng)用,感興趣的小伙伴跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧2024-09-09
C++實(shí)現(xiàn)轉(zhuǎn)置矩陣的循環(huán)
大家好,本篇文章主要講的是C++實(shí)現(xiàn)轉(zhuǎn)置矩陣的循環(huán),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
解析內(nèi)存對(duì)齊 Data alignment: Straighten up and fly right的詳解
對(duì)于所有直接操作內(nèi)存的程序員來說,數(shù)據(jù)對(duì)齊都是很重要的問題.數(shù)據(jù)對(duì)齊對(duì)你的程序的表現(xiàn)甚至能否正常運(yùn)行都會(huì)產(chǎn)生影響2013-05-05
對(duì)比C語言中的setbuf()函數(shù)和setvbuf()函數(shù)的使用
這篇文章主要介紹了對(duì)比C語言中的setbuf()函數(shù)和setvbuf()函數(shù)的使用,涉及到緩沖區(qū)與流的相關(guān)知識(shí),需要的朋友可以參考下2015-08-08
visual studio code 編譯運(yùn)行html css js文件的教程
這篇文章主要介紹了visual studio code 如何編譯運(yùn)行html css js文件,本文通過圖文實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03

