版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計:文本編輯(最后附完整代碼)</p><p> 一.問題描述---------------------------------------------1</p><p> 二.設(shè)計思路---------------------------------------------1</p><p><b> 三.系統(tǒng)實
2、現(xiàn)功能</b></p><p> 1.建立單鏈表-------------------------------------------2</p><p> 2.顯示文章內(nèi)容---------------------------------------- 3</p><p> 3.查找文章語句-----------------------------
3、------------3</p><p> 4.刪除文章語句-----------------------------------------5</p><p> 5.替換文章語句-----------------------------------------7</p><p> 6.統(tǒng)計文章字數(shù)------------------------------
4、-----------10</p><p> 7.寫入文本結(jié)束程序--------------------------------------10</p><p> 四.系統(tǒng)不足及需改進分------------------------------------11</p><p> 五.文件清單說明-------------------------------
5、-----------11</p><p> 六:附錄-------------------------------------------------12</p><p><b> 一:問題描述</b></p><p> 本次我所做的課程設(shè)計為:文本編輯,主要內(nèi)容是對中文文本的顯示、查找、刪除、替換、統(tǒng)計、寫入文本。在程序選擇功能后根據(jù)
6、提示,輸入任意長度中文語句即可對文章進行操作。</p><p><b> 二:設(shè)計思路</b></p><p> 文本編輯,顧名思義就是對一遍文章進行編輯,我所設(shè)計的是對中文的編輯。中文有兩個字節(jié)(漢字、標點),通常情況下通過文件輸入流僅僅可以取一個字節(jié)或者是以空格為分隔符取單詞這僅僅對英文的文章適用,周六周日我從網(wǎng)上搜索相關(guān)方法,未找到一條切實可用的對中文字符操
7、作的方法。后因看到一種對string的操作靈光一閃,想到了對中文的操作。</p><p> 因中文是兩個字節(jié),由兩部分ASCII碼組成,所以可用單鏈表一個節(jié)點存放一個漢字或字符,單鏈表的數(shù)據(jù)域是一個長度為二的char數(shù)組分別存漢字的兩個字節(jié)。若用戶從鍵盤輸入則將其存入string然后遍歷將其每一個字節(jié)取到char數(shù)組中,這樣只需兩個字節(jié)對比一次使char數(shù)組中相鄰的兩個字節(jié)與單鏈表中每一個節(jié)點的兩個char對比
8、即可遍歷。</p><p> 我所用的數(shù)據(jù)結(jié)構(gòu)為單鏈表,結(jié)構(gòu)中由一個長度為2的char數(shù)組和一個指針組成具體結(jié)構(gòu)如下:</p><p> typedef struct LNode</p><p><b> {</b></p><p> ElemType data[2];//長度為2的char數(shù)組,char[0]存
9、漢字前半部分,char[1]存后半部分</p><p> struct LNode *next;</p><p> }LinkList;</p><p><b> 三:系統(tǒng)實現(xiàn)的功能</b></p><p><b> 1.建立單鏈表</b></p><p> voi
10、d CLinkList(LinkList *&L) </p><p><b> {</b></p><p> LinkList *s,*r;</p><p><b> r=L;</b></p><p> r->next=NULL;</p><p>
11、char temp; //存放判斷變量,同時起到中間變量的作用</p><p> ifstream fin("a.txt");//打開文件輸入流</p><p> while(!fin.eof()) </p><p><b> {</b></p><p> s=(LinkList *
12、)malloc(sizeof(LinkList));//一個節(jié)點存一個漢字或字符</p><p> temp=fin.get(); //從文件取一個字符</p><p> if(temp!=' ') //判斷是否為空格、回車,若為空格回車則只存一個字符剩下一個用'1'代替</p><p><b> {</
13、b></p><p> s->data[0]=temp;</p><p> s->data[1]=fin.get();</p><p><b> }</b></p><p> else if(temp==' ')</p><p><b> {&
14、lt;/b></p><p> s->data[0]=temp;</p><p> s->data[1]='1';</p><p><b> }</b></p><p><b> else</b></p><p><b>
15、 {</b></p><p> fin.get();</p><p> s->data[0]='\n';</p><p> s->data[1]='1';</p><p><b> }</b></p><p> r->next
16、=s;</p><p><b> r=s;</b></p><p><b> }</b></p><p> r->next=NULL;</p><p> fin.close();</p><p><b> }</b></p>
17、<p><b> 顯示文章內(nèi)容</b></p><p> void DisList(LinkList *L)</p><p><b> {</b></p><p> LinkList *p=L->next;</p><p> while(p!=NULL)//遍歷單鏈表依次
18、輸出</p><p><b> {</b></p><p> if(p->data[0]!=' ')//判斷是否為空格決定輸入方式</p><p> cout<<p->data[0]<<p->data[1]; </p><p> else cout<
19、<' ';</p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> 查找文章語句</b></p><p> seek(LinkLi
20、st *&p,char a[],int m)函數(shù),遍歷查找單鏈表找到參數(shù)給定指針最近位置的對應(yīng)語句并返回邏輯位置(不包括空格和回車)。</p><p> seekCall(LinkList *L)函數(shù),調(diào)用seek()傳入一個位置可變的指針依次遍歷查找出所有輸入的語句的邏輯位置</p><p> int seek(LinkList *&p,char a[],int m)
21、//位置可變的指針,語句的char數(shù)組,數(shù)組長度</p><p><b> {</b></p><p> int n=0,flag=0,i;</p><p> LinkList *r;</p><p> while(p!=NULL)</p><p><b> {</b&g
22、t;</p><p> r=p;//p指針位置不變,通過r指針向下遍歷</p><p> for(i=0;i<m;i+=2)</p><p><b> {</b></p><p> if(r->data[0]==a[i]&&r->data[1]==a[i+1])</p>
23、;<p><b> { </b></p><p> flag=1; //標識是否找到相應(yīng)字符的變量</p><p> r=r->next;</p><p><b> }</b></p><p><b> else</b></p>
24、<p><b> {</b></p><p> flag=0; //只要又一次不相同則為0</p><p><b> break; </b></p><p><b> }</b></p><p><b> }</b></p&
25、gt;<p> if(p->data[0]!=' ')//不統(tǒng)計空格的個數(shù)</p><p><b> n++;</b></p><p> p=p->next;</p><p> if(flag==1)return n;</p><p><b> }</b
26、></p><p> if(flag==1)return n;</p><p> else return 0;</p><p><b> }</b></p><p> void seekCall(LinkList *L)</p><p><b> {</b>&
27、lt;/p><p> cout<<"請輸入要查找的語句:"<<endl;</p><p> string str;</p><p><b> cin>>str;</b></p><p> int n=0,n2=0,m;</p><p>
28、 m=str.size();</p><p> char *a=new char[m];//str長度為char數(shù)組長度</p><p> for(int i=0;i<m;i++)//將str轉(zhuǎn)化為char數(shù)組</p><p><b> {</b></p><p> a[i]=str[i];</p&g
29、t;<p><b> }</b></p><p> LinkList *p;//給seek2傳入一個位置可變的指針,初始位置為L的頭部</p><p> p=L->next;</p><p> while(p!=NULL)</p><p><b> {</b></
30、p><p> n2=seek(p,a,m);//遍歷找到每個語句</p><p><b> n+=n2;</b></p><p> if(n>0&&n2>0)</p><p> cout<<"查找到語句:"<<str<<"
31、位于第:"<<n<<"位"<<endl;</p><p> else if(n==0)</p><p> cout<<"文章中無此語句!"<<endl;</p><p><b> }</b></p><p>
32、;<b> }</b></p><p><b> 刪除文章語句</b></p><p> seek2(LinkList *&p,char a[],int m)函數(shù)查找語句在單鏈表中的具體位置(包括空格和回車)并返回他的位置</p><p> Ldelete2(LinkList *&L,int n,i
33、nt m)函數(shù)通過參數(shù)傳入的語句位置和要刪除的語句長度進行刪除</p><p> LdeleteCall(LinkList *&L)調(diào)用seek2()和Ldelete2()函數(shù)刪除對語句</p><p> int seek2(LinkList *&p,char a[],int m)//與seek基本相同,少一個判斷是否為空格的語句</p><p>
34、;<b> {</b></p><p> int n=0,flag=0,i;</p><p> LinkList *r;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> r=p;//p指針位置不變,通過r指針
35、向下遍歷</p><p> for(i=0;i<m;i+=2)</p><p><b> {</b></p><p> if(r->data[0]==a[i]&&r->data[1]==a[i+1])</p><p><b> { </b></p&
36、gt;<p><b> flag=1;</b></p><p> r=r->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
37、<p><b> flag=0; </b></p><p><b> break; </b></p><p><b> }</b></p><p><b> }</b></p><p><b> n++;</b
38、></p><p> p=p->next;</p><p> if(flag==1)return n;</p><p><b> }</b></p><p> if(flag==1)return n;</p><p> else return 0;</p>&l
39、t;p><b> }</b></p><p> void Ldelete2(LinkList *&L,int n,int m)</p><p><b> {</b></p><p> LinkList *p=L;</p><p> for(int i=0;i<n-1;
40、i++)//遍歷p指針讓他指向n-1的位置</p><p> p=p->next;</p><p> LinkList *r=p;</p><p> for(int i=0;i<m;i+=2)//在p指針之后遍歷,讓r指針向后移動m個位置</p><p> r=r->next;</p><p>
41、; p->next=r->next; //刪除對應(yīng)語句</p><p><b> }</b></p><p> void LdeleteCall(LinkList *&L)</p><p><b> {</b></p><p> cout<<"請輸
42、入要刪除的語句:"<<endl;</p><p> string str;</p><p><b> cin>>str;</b></p><p> int n=0,n2=0,m;</p><p> m=str.size();</p><p> char
43、*a=new char[m];</p><p> for(int i=0;i<m;i++)//將str轉(zhuǎn)化為數(shù)組</p><p><b> {</b></p><p> a[i]=str[i];</p><p><b> }</b></p><p> Link
44、List *p;//給seek2傳入一個位置可變的指針,初始位置為L的頭部</p><p><b> p=L;</b></p><p><b> int mm=0;</b></p><p> while(p!=NULL)//判斷文章中是否有此語句</p><p><b> {<
45、;/b></p><p> seek2(p,a,m);</p><p><b> mm++;</b></p><p><b> }</b></p><p><b> if(mm==0)</b></p><p><b> {<
46、;/b></p><p> cout<<"文章中無此語句!"<<endl;</p><p><b> return;</b></p><p><b> }</b></p><p> for(int i=0;i<mm;i++)//刪除次數(shù)
47、</p><p><b> {</b></p><p> LinkList *pp;</p><p> pp=L->next;//從單鏈表頭部依次遍歷,刪除所有語句</p><p> n2=seek2(pp,a,m);</p><p><b> n+=n2;</b&
48、gt;</p><p> if(n>0&&n2>0)</p><p> Ldelete2(L,n,m);</p><p><b> }</b></p><p><b> }</b></p><p><b> 5.替換文章語句&l
49、t;/b></p><p> StrToList(LinkList *&L2,string str)函數(shù)將輸入的string型數(shù)據(jù)str轉(zhuǎn)化為單鏈表L2</p><p> Lreplace(LinkList *&L,LinkList *&L2,int n,int m)函數(shù)將L2單鏈表插入到L中并刪除要替換的語句</p><p>
50、LreplaceCall(LinkList *&L)調(diào)用前兩個函數(shù)</p><p> void StrToList(LinkList *&L2,string str)//將str轉(zhuǎn)化為單鏈表L2</p><p><b> {</b></p><p> L2=(LinkList *)malloc(sizeof(LinkLis
51、t));</p><p> L2->next=NULL;</p><p><b> int m=0;</b></p><p> m=str.size();</p><p> char *a=new char[m];</p><p> for(int i=0;i<m;i++)/
52、/將str轉(zhuǎn)化為char</p><p><b> {</b></p><p> a[i]=str[i];</p><p><b> }</b></p><p> LinkList *s,*r;</p><p><b> int i;</b>&
53、lt;/p><p><b> r=L2;</b></p><p> for(i=0;i<m;i+=2)//將char數(shù)組的值用尾插法插入到L2中</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</
54、p><p> s->data[0]=a[i];</p><p> s->data[1]=a[i+1];</p><p> r->next=s;</p><p><b> r=s;</b></p><p><b> }</b></p>&l
55、t;p> r->next=NULL;</p><p><b> }</b></p><p> void Lreplace(LinkList *&L,LinkList *&L2,int n,int m)</p><p><b> {</b></p><p> Li
56、nkList *p=L;</p><p> for(int i=0;i<n-1;i++)//將p遍歷到n-1位置</p><p><b> {</b></p><p> p=p->next;</p><p><b> }</b></p><p> Lin
57、kList *r;</p><p><b> r=p;</b></p><p> for(int i=0;i<m;i+=2)//r從p的位置向后移動m個位置</p><p><b> {</b></p><p> r=r->next;</p><p>&l
58、t;b> }</b></p><p> LinkList *p2=L2;</p><p> while(p2->next!=NULL)//p2指向L2尾部</p><p> p2=p2->next;</p><p> p->next=L2->next;//p指向L2</p>&
59、lt;p> p2->next=r->next;//p2指向r的下一個節(jié)點</p><p><b> free(L2);</b></p><p><b> }</b></p><p> void LreplaceCall(LinkList *&L)</p><p>&
60、lt;b> {</b></p><p> string str1,str2;</p><p> cout<<"請輸入原替換的語句:"<<endl;</p><p> cin>>str1;</p><p> cout<<"請輸入替換語句:&
61、quot;<<endl;</p><p> cin>>str2;</p><p> LinkList *L2;</p><p><b> int m=0;</b></p><p> m=str1.size();</p><p> char *a=new char[
62、m];</p><p> for(int i=0;i<m;i++)</p><p><b> {</b></p><p> a[i]=str1[i];</p><p><b> }</b></p><p> LinkList *p;</p>&l
63、t;p> p=L->next;</p><p> int n=0,n2=0;</p><p> while(p!=NULL)//遍歷L替換所有語句</p><p> {n2=seek2(p,a,m);</p><p><b> n+=n2;</b></p><p> if
64、(n>0&&n2>0)</p><p><b> {</b></p><p> StrToList(L2,str2);//替換一次就建立一次L2,防止形成循環(huán)表</p><p> Lreplace(L,L2,n,m);</p><p><b> }</b><
65、/p><p><b> n2=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 6:統(tǒng)計文章字數(shù)</b></p><p> int number(LinkLi
66、st *L)</p><p><b> {</b></p><p> LinkList *p;</p><p><b> p=L;</b></p><p><b> int n=0;</b></p><p> while(p->next!
67、=NULL)//循環(huán)遍歷統(tǒng)計除了空格和回車的字數(shù)</p><p><b> {</b></p><p> if(p->data[0]!=' '&&p->data[0]!='\n')</p><p><b> n++;</b></p><p
68、> p=p->next;</p><p><b> }</b></p><p><b> return n;</b></p><p><b> }</b></p><p> 7:寫入文本結(jié)束程序</p><p> void end
69、(LinkList *L)</p><p><b> {</b></p><p> ofstream fout("b.txt");//文件b,txt不是讀取時的文件是一個,為了對照而寫入的新文本</p><p> LinkList *p=L->next;</p><p> while(p
70、!=NULL)</p><p><b> {</b></p><p> if(p->data[0]!=' '&&p->data[0]!='\n')</p><p> {fout<<p->data[0]<<p->data[1];}</p&g
71、t;<p> else if(p->data[0]==' ')</p><p> fout<<p->data[0];</p><p> else if(p->data[0]='\n')</p><p> fout<<p->data[0];</p>&l
72、t;p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> 四:系統(tǒng)不足及需改進部分</p><p> 僅僅用單鏈表遍歷系統(tǒng)效率較低,未找到一種可以用string直接讀取文本中中文內(nèi)容的方法,不能用于英文。
73、 </p><p><b> 五:文件清單說明</b></p><p><b> 六:附錄</b>
74、</p><p> 這是刪除的第二個方法</p><p> bool Ldelete1(LinkList *&L,char u[])</p><p><b> {</b></p><p> LinkList *p=L;</p><p> LinkList *q;</p>
75、;<p> LinkList *r;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> r=p->next;</p><p> if(r->data[0]==u[0]&&r->data[1]==u[1])<
76、;/p><p><b> {</b></p><p> q=p->next;</p><p> p->next=q->next;</p><p><b> free(q);</b></p><p> return true;</p>&l
77、t;p><b> }</b></p><p> p=p->next;</p><p><b> }</b></p><p> return false;</p><p><b> }</b></p><p><b> 完
78、整代碼:</b></p><p> #include <fstream></p><p> #include <string></p><p> #include <iostream></p><p> using namespace std;</p><p>
79、 typedef char ElemType;</p><p> typedef struct LNode</p><p><b> {</b></p><p> ElemType data[2];//長度為2的char數(shù)組,char[0]存漢字前半部分,char[1]存后半部分</p><p> struct
80、LNode *next;</p><p> }LinkList;</p><p> void InitList(LinkList *&L);</p><p> void CLinkList(LinkList *&L);</p><p> void DisList(LinkList *L);</p><
81、;p> int seek(LinkList *&p,char a[],int m);</p><p> void seekCall(LinkList *L);</p><p> int seek2(LinkList *&p,char a[],int m);</p><p> bool Listdelete(LinkList *&
82、L,int i);</p><p> void Ldelete2(LinkList *&L,int n,int m);</p><p> void LdeleteCall(LinkList *&L);</p><p> void StrToList(LinkList *&L2,string str);</p><p
83、> void Lreplace(LinkList *&L,LinkList *&L2,int n,int m);</p><p> void LreplaceCall(LinkList *&L);</p><p> int number(LinkList *L);</p><p> void end(LinkList *L);&
84、lt;/p><p> void out();</p><p> void InitList(LinkList *&L)</p><p><b> {</b></p><p> L=(LinkList *)malloc(sizeof(LinkList));</p><p> L->
85、;next=NULL;</p><p><b> }</b></p><p> void CLinkList(LinkList *&L) </p><p><b> {</b></p><p> LinkList *s,*r;</p><p><b&g
86、t; r=L;</b></p><p> r->next=NULL;</p><p> char temp; //存放判斷變量,同時起到中間變量的作用</p><p> ifstream fin("a.txt");//打開文件輸入流</p><p> while(!fin.eof())
87、 </p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));//一個節(jié)點存一個漢字或字符</p><p> temp=fin.get(); //從文件取一個字符</p><p> if(temp!=' ') //
88、判斷是否為空格、回車,若為空格回車則只存一個字符剩下一個用'1'代替</p><p><b> {</b></p><p> s->data[0]=temp;</p><p> s->data[1]=fin.get();</p><p><b> }</b><
89、;/p><p> else if(temp==' ')</p><p><b> {</b></p><p> s->data[0]=temp;</p><p> s->data[1]='1';</p><p><b> }</b&
90、gt;</p><p><b> else</b></p><p><b> {</b></p><p> fin.get();</p><p> s->data[0]='\n';</p><p> s->data[1]='1
91、39;;</p><p><b> }</b></p><p> r->next=s;</p><p><b> r=s;</b></p><p><b> }</b></p><p> r->next=NULL;</p>
92、;<p> fin.close();</p><p><b> }</b></p><p> void DisList(LinkList *L)</p><p><b> {</b></p><p> LinkList *p=L->next;</p>&l
93、t;p> while(p!=NULL)//遍歷單鏈表依次輸出</p><p><b> {</b></p><p> if(p->data[0]!=' ')//判斷是否為空格決定輸入方式</p><p> cout<<p->data[0]<<p->data[1]; <
94、/p><p> else cout<<' ';</p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> int seek(LinkList *&p,c
95、har a[],int m)//位置可變的指針,語句的char數(shù)組,數(shù)組長度</p><p><b> {</b></p><p> int n=0,flag=0,i;</p><p> LinkList *r;</p><p> while(p!=NULL)</p><p><b&
96、gt; {</b></p><p> r=p;//p指針位置不變,通過r指針向下遍歷</p><p> for(i=0;i<m;i+=2)</p><p><b> {</b></p><p> if(r->data[0]==a[i]&&r->data[1]==a[
97、i+1])</p><p><b> { </b></p><p> flag=1; //標識是否找到相應(yīng)字符的變量</p><p> r=r->next;</p><p><b> }</b></p><p><b> else</b&g
98、t;</p><p><b> {</b></p><p> flag=0; //只要又一次不相同則為0</p><p><b> break; </b></p><p><b> }</b></p><p><b> }<
99、;/b></p><p> if(p->data[0]!=' ')//不統(tǒng)計空格的個數(shù)</p><p><b> n++;</b></p><p> p=p->next;</p><p> if(flag==1)return n;</p><p><
100、b> }</b></p><p> if(flag==1)return n;</p><p> else return 0;</p><p><b> }</b></p><p> void seekCall(LinkList *L)</p><p><b>
101、 {</b></p><p> cout<<"請輸入要查找的語句:"<<endl;</p><p> string str;</p><p><b> cin>>str;</b></p><p> int n=0,n2=0,m;</p&g
102、t;<p> m=str.size();</p><p> char *a=new char[m];//str長度為char數(shù)組長度</p><p> for(int i=0;i<m;i++)//將str轉(zhuǎn)化為char數(shù)組</p><p><b> {</b></p><p> a[i]=s
103、tr[i];</p><p><b> }</b></p><p> LinkList *p;</p><p> p=L->next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p>
104、; n2=seek(p,a,m);//遍歷找到每個語句</p><p><b> n+=n2;</b></p><p> if(n>0&&n2>0)</p><p> cout<<"查找到語句:"<<str<<" 位于第:"<&
105、lt;n<<"位"<<endl;</p><p> else if(n==0)</p><p> cout<<"文章中無此語句!"<<endl;</p><p><b> }</b></p><p><b> }&l
106、t;/b></p><p> int seek2(LinkList *&p,char a[],int m)//于seek基本相同,少一個判斷是否為空格的語句</p><p><b> {</b></p><p> int n=0,flag=0,i;</p><p> LinkList *r;<
107、/p><p> while(p!=NULL)</p><p><b> {</b></p><p> r=p;//p指針位置不變,通過r指針向下遍歷</p><p> for(i=0;i<m;i+=2)</p><p><b> {</b></p>
108、<p> if(r->data[0]==a[i]&&r->data[1]==a[i+1])</p><p><b> { </b></p><p><b> flag=1;</b></p><p> r=r->next;</p><p><
109、;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> flag=0; </b></p><p><b> break; </b></p>
110、<p><b> }</b></p><p><b> }</b></p><p><b> n++;</b></p><p> p=p->next;</p><p> if(flag==1)return n;</p><p&g
111、t;<b> }</b></p><p> if(flag==1)return n;</p><p> else return 0;</p><p><b> }</b></p><p> bool Listdelete(LinkList *&L,int i)</p>
112、<p><b> {</b></p><p><b> int j=0;</b></p><p> LinkList *p=L,*q;</p><p> while(j<i-1&&p!=NULL)</p><p><b> {</b>
113、</p><p><b> j++;</b></p><p> p=p->next;</p><p><b> }</b></p><p> if(p==NULL)</p><p> return false;</p><p><
114、b> else</b></p><p><b> {</b></p><p> q=p->next;</p><p> if(q==NULL)</p><p> return false;</p><p> p->next=q->next;</
115、p><p> return true;</p><p><b> }</b></p><p><b> }</b></p><p> void Ldelete2(LinkList *&L,int n,int m)</p><p><b> {<
116、/b></p><p> LinkList *p=L;</p><p> for(int i=0;i<n-1;i++)//遍歷p指針讓他指向n-1的位置</p><p> p=p->next;</p><p> LinkList *r=p;</p><p> for(int i=0;i<
117、;m;i+=2)//在p指針之后遍歷,讓r指針向后移動m個位置</p><p> r=r->next;</p><p> p->next=r->next; //刪除對應(yīng)語句</p><p><b> }</b></p><p> bool Ldelete1(LinkList *&L,ch
118、ar u[])</p><p><b> {</b></p><p> LinkList *p=L;</p><p> LinkList *q;</p><p> LinkList *r;</p><p> while(p!=NULL)</p><p><b
119、> {</b></p><p> r=p->next;</p><p> if(r->data[0]==u[0]&&r->data[1]==u[1])</p><p><b> {</b></p><p> q=p->next;</p>&
120、lt;p> p->next=q->next;</p><p><b> free(q);</b></p><p> return true;</p><p><b> }</b></p><p> p=p->next;</p><p><
121、;b> }</b></p><p> return false;</p><p><b> }</b></p><p> void LdeleteCall(LinkList *&L)</p><p><b> {</b></p><p>
122、 cout<<"請輸入要刪除的語句:"<<endl;</p><p> string str;</p><p><b> cin>>str;</b></p><p> int n=0,n2=0,m;</p><p> m=str.size();</p&
123、gt;<p> char *a=new char[m];</p><p> for(int i=0;i<m;i++)//將str轉(zhuǎn)化為數(shù)組</p><p><b> {</b></p><p> a[i]=str[i];</p><p><b> }</b></p
124、><p> LinkList *p;</p><p><b> p=L;</b></p><p><b> int mm=0;</b></p><p> while(p!=NULL)//判斷文章中是否有此語句</p><p><b> {</b>&
125、lt;/p><p> seek2(p,a,m);</p><p><b> mm++;</b></p><p><b> }</b></p><p><b> if(mm==0)</b></p><p><b> {</b>&
126、lt;/p><p> cout<<"文章中無此語句!"<<endl;</p><p><b> return;</b></p><p><b> }</b></p><p> for(int i=0;i<mm;i++)//刪除次數(shù)</p&g
127、t;<p><b> {</b></p><p> LinkList *pp;</p><p> pp=L->next;//從單鏈表頭部依次遍歷,刪除所有語句</p><p> n2=seek2(pp,a,m);</p><p><b> n+=n2;</b></
128、p><p> if(n>0&&n2>0)</p><p> Ldelete2(L,n,m);</p><p><b> }</b></p><p><b> }</b></p><p> void StrToList(LinkList *&a
129、mp;L2,string str)//將str轉(zhuǎn)化為單鏈表L2</p><p><b> {</b></p><p> L2=(LinkList *)malloc(sizeof(LinkList));</p><p> L2->next=NULL;</p><p><b> int m=0;<
130、;/b></p><p> m=str.size();</p><p> char *a=new char[m];</p><p> for(int i=0;i<m;i++)//將str轉(zhuǎn)化為char</p><p><b> {</b></p><p> a[i]=str[
131、i];</p><p><b> }</b></p><p> LinkList *s,*r;</p><p><b> int i;</b></p><p><b> r=L2;</b></p><p> for(i=0;i<m;i+=
132、2)//將char數(shù)組的值用尾插法插入到L2中</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data[0]=a[i];</p><p> s->data[1]=a[i+1];</p
133、><p> r->next=s;</p><p><b> r=s;</b></p><p><b> }</b></p><p> r->next=NULL;</p><p><b> }</b></p><p&g
134、t; void Lreplace(LinkList *&L,LinkList *&L2,int n,int m)</p><p><b> {</b></p><p> LinkList *p=L;</p><p> for(int i=0;i<n-1;i++)//將p遍歷到n-1位置</p><
135、;p><b> {</b></p><p> p=p->next;</p><p><b> }</b></p><p> LinkList *r;</p><p><b> r=p;</b></p><p> for(int i
136、=0;i<m;i+=2)//r從p的位置向后移動m個位置</p><p><b> {</b></p><p> r=r->next;</p><p><b> }</b></p><p> LinkList *p2=L2;</p><p> while
137、(p2->next!=NULL)//p2指向L2尾部</p><p> p2=p2->next;</p><p> p->next=L2->next;//p指向L2</p><p> p2->next=r->next;//p2指向r的下一個節(jié)點</p><p><b> free(L2);
138、</b></p><p><b> }</b></p><p> void LreplaceCall(LinkList *&L)</p><p><b> {</b></p><p> string str1,str2;</p><p> cou
139、t<<"請輸入原替換的語句:"<<endl;</p><p> cin>>str1;</p><p> cout<<"請輸入替換語句:"<<endl;</p><p> cin>>str2;</p><p> LinkLis
140、t *L2;</p><p><b> int m=0;</b></p><p> m=str1.size();</p><p> char *a=new char[m];</p><p> for(int i=0;i<m;i++)</p><p><b> {</
141、b></p><p> a[i]=str1[i];</p><p><b> }</b></p><p> LinkList *p;</p><p> p=L->next;</p><p> int n=0,n2=0;</p><p> while(
142、p!=NULL)//遍歷L替換所有語句</p><p> {n2=seek2(p,a,m);</p><p><b> n+=n2;</b></p><p> if(n>0&&n2>0)</p><p><b> {</b></p><p&g
143、t; StrToList(L2,str2);//替換一次就建立一次L2,防止形成循環(huán)表</p><p> Lreplace(L,L2,n,m);</p><p><b> }</b></p><p><b> n2=0;</b></p><p><b> }</b>
144、</p><p><b> }</b></p><p> int number(LinkList *L)</p><p><b> {</b></p><p> LinkList *p;</p><p><b> p=L;</b></p&
145、gt;<p><b> int n=0;</b></p><p> while(p->next!=NULL)//循環(huán)遍歷統(tǒng)計除了空格和回車的字數(shù)</p><p><b> {</b></p><p> if(p->data[0]!=' '&&p->da
146、ta[0]!='\n')</p><p><b> n++;</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> return n;</b></p><p><
147、;b> }</b></p><p> void end(LinkList *L)</p><p><b> {</b></p><p> ofstream fout("b.txt");</p><p> LinkList *p=L->next;</p>
148、<p> while(p!=NULL)</p><p><b> {</b></p><p> if(p->data[0]!=' '&&p->data[0]!='\n')</p><p> {fout<<p->data[0]<<p->
149、;data[1];}</p><p> else if(p->data[0]==' ')</p><p> fout<<p->data[0];</p><p> else if(p->data[0]='\n')</p><p> fout<<p->data
150、[0];</p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> void out()</p><p><b> {</b></p><p&
151、gt; cout<<"********************************************************************************"<<endl;</p><p> cout<<" 文本編輯
152、 "<<endl;</p><p> cout<<" 1.顯示文章內(nèi)容 "<<endl;</p><p> cout<<"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---簡易文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--簡易文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-簡易文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-小型文本編輯器的設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計總結(jié)報告--文本編輯器
- 文本編輯器課程設(shè)計
- 文本編輯器課程設(shè)計報告
- java課程設(shè)計--文本編輯器
- java課程設(shè)計---文本編輯器
- java課程設(shè)計---文本編輯器
- vb課程設(shè)計文本編輯器
- java課程設(shè)計(文本編輯器)
- c語言課程設(shè)計--文本編輯器
- vb課程設(shè)計報告----文本編輯器
- vb課程設(shè)計報告---文本編輯器
- c_文本編輯器課程設(shè)計
- 簡易文本編輯器課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計---文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---鏈表的創(chuàng)建、插入、刪除、修改
評論
0/150
提交評論