# include & ltmalloc.h & gt
# include & ltstring.h & gt
# include & ltstdlib.h & gt
# include & ltctype.h & gt
#定義NULL 0
#定義最大100
typedef結構lnode{
計費日期【最大值】;//存儲數據
struct lnode * prior//前驅
struct lnode * next//繼任者
int數字;//記錄壹個節點的字符數!如果是頭節點,記錄他的節點數。
int quese//記錄節點在鏈表中的位置。
} lnodetype
lnodetype * l;//設置兩個全局變量,即頭節點指針和尾節點指針。
lnodetype * end
/* * * * * * * *該函數用於初始化* * * * * * * *//
int iniatelist(lnodetype * * l,lnodetype ** end)
{
(* l)=(lnode type *)malloc(sizeof(lnode type));
if(* l)= = NULL)
{
Printf(“內存空間不足!節目要退出了!”);
返回0;
}
(* l)-》;prior =(* l)-》。next = NULL//這是壹個雙向鏈表。
(* l)-》;number =(* l)-& gt;quese = 0;
(* end)=(* l);
Printf(“程序初始化完成!“);
返回0;
}
/* * * * * * * *此函數用於創建壹個節點並插入* * * * * * *//
內部鏈接(lnodetype ** l,lnodetype ** end)
{
lnodetype * s;
s =(lnode type *)malloc(sizeof(lnode type));
if(s = = NULL ){
Printf(“內存空間不足,程序即將退出!“" ) ;
返回0;
}
(* end)-》;next = s;
s-& gt;prior =(* end);
(* end)=(* end)-& gt;接下來;
(* l)-》;數字++;//增加壹個節點,第壹個節點的數量將增加1。
s-& gt;quese =(* l)-& gt;號碼;//這是鏈表中記錄節點的位置。
printf(“% d line“,s-》;quese);//這是節點在整個鏈表中的位置。
獲取(s-& gt;日期);
s-& gt;number = strlen(s-& gt;日期);
返回0;
}
/* * * * * * * *這是打印鏈表的功能* * * * * * * *//
內部打印(lnodetype ** l,lnodetype ** end)
{
lnodetype * p;
int I;
int j = 0;
int couter =(* l)-& gt;號碼;
p =(* l)-》;接下來;
for(I = 0;我& ltcouteri++){
printf(“% d line“,I+1);
j = 0;
while((p-& gt;date【j】& gt;=‘a‘amp;& ampp-》;日期【j】& lt;=‘z‘)| |
(p-》;date【j】& gt;=‘A‘amp;& ampp-》;日期【j】& lt;=‘z‘)| |
p-》;date【j】& gt;=‘0‘和amp& ampp-》;日期【j】& lt;='9')
{
printf(“% c“,p-& gt;date【j】);
j++;
}
printf(“n“);
p = p-& gt;接下來;
}
返回0;
}
//* * * * * *此函數用於查找和編輯相應的行* * * * * * * * *//
int search(lnodetype * * l,lnodetype ** end)
{
int數字;
scanf(“% d“,& amp數量);
int I;
lnodetype * p;
p =(* l)-》;接下來;
for(I = 0;我& lt數字-1;i++)
p = p-& gt;接下來;
printf(“% d line“,number);
獲取(p-& gt;日期);
返回0;
}
//* * * * * * *這是在文本文件中搜索字符串的功能* * * * * * * * *//
int search str(lnodetype * * l,lnodetype ** end)
{
char ptr【100】;
int arrycouter
int mystrcmp(char *,char *,int);
printf(“好!現在輸入您要查找的字符串!”) ;
scanf(“% s“,ptr);
arry couter = strlen(ptr);
lnodetype * s;
s =(* l)-& gt;接下來;
char * p;
int I = 1;
int couter = 0;
int number =(* l)-& gt;號碼;
p =(char *)s-& gt;日期;
同時(我& amp& amp數量){
// i=1是的,沒有找到證明,繼續搜索到第二個節點。
同時(我& amp& amp((* p & gt=‘a‘)& amp;& amp(*p <。=‘z‘))| |(* p & gt;=‘A‘)& amp;& amp(*p <。=‘Z’)))){
I = mystrcmp(p,ptr,arry couter);
if(I = = 1 ){
Printf(“字符串已經位於第%d行,以第%d個字符開始。“,s-》;quese,couter+1);
I = 0;
}
其他
{
p++;
couter++;
I = 1;
}
}
s = s-& gt;接下來;
p =(char *)s-& gt;日期;
號碼-;
}
if(I = = 1)
Printf(“該文檔中不存在字符串!“);
返回0;
}
/* * * * * * * * *(1)該函數用於實現* * * * * * * *//
int exit unsave(lnodetype * * l,lnodetype ** end)
{
lnodetype * s;
while(* l)!=(* end)){//如果不保存,最好釋放所有節點的空間以節省空間。
s =(* end);
(* end)=(* end)-& gt;先驗;
免費;
}
返回0;
}
/* * * * * * *(2)該函數用於實現* * * * * * * * *的功能//
int quitandsave(lnodetype * * l,lnodetype ** end)
{
FILE * fp
char ch
char文件名【20】;
lnodetype * p;
int I;
int j;
int couter =(* l)-& gt;號碼;
p =(* l)-》;接下來;
Printf(“請輸入文件名:“);
scanf(“% s“,文件名);
if((FP = fopen(filename,“w“))= = NULL){
Printf(“文件無法打開!n”);
返回0;
}
for(I = 0;我& ltcouteri++){//有幾個節點就存儲多少次。
ch = p-& gt;日期【0】;
j = 1;
while(ch!= '\0'){
fputc(ch,FP);
ch = p-& gt;日期【j】;
j++;
}
p = p-& gt;接下來;
fputc(‘#‘,FP);//請註意,結束符號添加在每個節點之後。
}
fputc(‘@‘,FP);//整個文件被關閉。
fclose(FP);//註意關閉文件。
返回0;
}
//* * * * * * *由於庫函數提供的函數比較字符串不符合要求,我寫了壹個* * * * * * * *
int mystrcmp(char * p,char * sour,int number)
{
同時(數字& amp& amp(* p)=(* sour)& amp;& amp
((* p & gt=‘a‘)& amp;& amp(*p <。=‘z‘))| |(* p & gt;=‘A‘)& amp;& amp(*p <。=‘Z’)))){
p++;
sour++;
號碼-;
}
如果(數字== 0)
返回1;
其他
返回0;
}
//* * * * * * * * *該函數用於實現統計字符串函數* * * * * * *//
int碼字(lnodetype ** l,lnodetype ** end)
{//考慮到只統計壹行字沒有意義,統計全文。
int yes = 1;//這是輸入單詞的標誌。
int no = 0;//單詞外的符號
int i,j,inaword,count = 0;
inaword = no
lnodetype * s =(* l)-& gt;接下來;
for(j = 0;j & lt(* l)-》;號碼;j++){
for(I = 0;(s-》;日期【I】& gt;=‘a‘amp;& amps-& gt;日期【I】& lt;=‘z‘)| |
(s-》;日期【I】& gt;=‘A‘amp;& amps-& gt;日期【I】& lt;=‘z‘)| |
(s-》;日期【I】& gt;=‘0‘和amp& amps-& gt;日期【I】& lt;='9' ) ||
(s-》;date【I】= =““);i++)
{
if(s-》;日期【我】==““)
inaword = no
其他
if(in word = = no)
{
inaword = yes
count++;//計算字數
}
}
s = s-& gt;接下來;
in word = 0;//註意這裏,將符號設置為0!
}
printf(“n text ^ 1 * * *有%d行“,(* l)-& gt;數量);
printf(“n此文本有%d個單詞!“,計數);
返回計數;
}
/* * * * * * * *此函數用於計算文本的行數* * * * * * *//
int line couter(lnodetype * * l,lnodetype ** end)
{
int couter
couter =(* l)-& gt;號碼;
返回couter
}
/* * * * * * * * *該功能是所有功能中的壹個菜單功能* * * * * * * * *//
int edit menu(lnodetype * * l,lnodetype ** end)
{
char選擇;
char * p =“cls“;
int I = 1;//這兩個變量用於控制循環。
int j = 1;
系統(p);
prin(& amp;(* l);(* end));
while(j ){
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * e:編輯相應的行* * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *問:退出編輯* * * * * * * * * * * * * *。
scanf(“% c“,& amp選擇);
scanf(“% c“,& amp選擇);//莫名其妙的問題,需要兩條request input語句才能停止!
開關(選擇)
{
案例“e ”:
I = 1;
當(我)
{
搜索(amp(* l);(* end));
系統(p);
prin(& amp;(* l);(* end));
printf(“n 1繼續編輯0結束編輯n“);
scanf(“% d“,& amp我);
}
}
打破;
案例:{
I = 1;
當(我)
{
search str(& amp;(* l);(* end));
getchar();
getchar();
系統(p);
prin(& amp;(* l);(* end));
printf(“n 1繼續搜索0並結束搜索n“);
scanf(“% d“,& amp我);
}
}
打破;
案例“t ”:
cout word(& amp;(* l);(* end));
getchar();
}破;
默認值:返回0;
}
系統(p);
prin(& amp;(* l);(* end));
printf(“n 1“);
scanf(“% d“,& ampj);
if(j = = 1)
系統(p);
其他
返回0;
}
返回0;
}
/* * * * * * * *實現第壹個模塊:新建壹個空白文檔* * * * * * *//
int newtext(lnodetype * * l,lnodetype ** end)
{
Printf(“新文本文件:n“);
int I = 1;
char judstr【MAX】;
lnodetype * temp
char判斷;
char * p =“cls“;
while(1 ){
鏈接(& amp(* l);(* end));
jud =(* end)-》;日期【0】;
if(jud = =‘5‘){//輸入‘5‘結束壹切。
temp =(* end);
(* end)=(* end)-& gt;先驗;
免費(臨時);
while(1 ){
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * *退出:不保存即退出* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * QAS:退出並保存* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * CON:繼續輸入!* * * * * * * * * * * * * * * * * * * * * * * * * * n“);
gets(judstr);
如果(!strcmp(judstr,“out“))
{
退出保存(& amp(* l);(* end));
返回0;
}
其他
如果(!strcmp(jud str,“qas“)
{
quitandsave(& amp;(* l);(* end));
返回0;
}
其他
如果(!strcmp(judstr,“edit“))
{
editmenu(l,end);
返回0;
}
系統(p);
}
返回0;
}
}
返回0;
}
//* * * * * * *這是加載文件的功能* * * * * * * *//
int loadtaxt(char * filename)
{
FILE * fp
lnodetype * l;
char ch
int I = 0;
char * p =“cls“;
char judstr【MAX】;
lnodetype * head
lnodetype * end
iniatelist(& amp;頭像& ampend);
l =端=頭;
if((FP = fopen(filename,“r+“))= NULL){
Printf(“文件無法打開!n“);
返回0;
}
ch = fgetc(FP);
while(ch!= '@' ){
lnodetype * s;
s =(lnode type *)malloc(sizeof(lnode type));
if(s = = NULL ){
Printf(“內存空間不足,程序即將退出!“" ) ;
返回0;
}
end-》;next = s;
s-& gt;先驗=結束;
end = end-& gt;接下來;
l-》;數字++;
s-& gt;quese = l-& gt;號碼;
printf(“% d line“,s-》;quese);
while(ch!= '#'){
s-& gt;date【I】= ch;
ch = fgetc(FP);
i++;
}
I = 0;
while((end-& gt;日期【I】& gt;=‘a‘amp;& ampend-》;日期【I】& lt;=‘z‘)| |
(end-》;日期【I】& gt;=‘A‘amp;& ampend-》;日期【I】& lt;=‘z‘)| |
(end-》;日期【I】& gt;=‘0‘和amp& ampend-》;日期【I】& lt;='9' ) ||
(end-》;date【I】= =““))
{
printf(“% c“,end-& gt;date【I】);
i++;
}
end-》;date【I】=“\ 0“;//註意,最好將此添加到節點中,以便退出保存函數知道此節點已經結束。
printf(“n“);
I = 0;
ch = fgetc(FP);
}
fclose(FP);
printf(“n文件加載成功!n“);
while(1 ){
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * QAS:退出並保存* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
printf(“* * * * * * * * * * * * * * * * * * * * * * CON:繼續輸入!* * * * * * * * * * * * * * * * * * * * * * * * * * n“);
scanf(“% s“,judstr);
如果(!strcmp(judstr,“out“))
{
退出保存(& ampl & amp;end);
返回0;
}
其他
如果(!strcmp(jud str,“qas“)
{
quitandsave(& amp;l & amp;end);
返回0;
}
其他
如果(!strcmp(judstr,“edit“))
{
編輯菜單l & amp;end);
返回0;
}
系統(p);
}
返回0;
}
//* * * * * * *主要功能* * * * * * * * *//
無效總管(無效)
{
//iniatelist(& amp;l & amp;end);
//new text(& amp;l & amp;end);
char文件名【MAX】;
scanf(“% s“,文件名);
loadtaxt(文件名);
}