數(shù)據(jù)結(jié)構(gòu)C語言串的基本操作_第1頁
數(shù)據(jù)結(jié)構(gòu)C語言串的基本操作_第2頁
數(shù)據(jù)結(jié)構(gòu)C語言串的基本操作_第3頁
數(shù)據(jù)結(jié)構(gòu)C語言串的基本操作_第4頁
數(shù)據(jù)結(jié)構(gòu)C語言串的基本操作_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、串的基本操作#include#include#include#define m 100typedef structchar chm;int length;Hstr;void main()Hstr *l,*p,*r;char c,w;int h,j,k;int i=0;l=(Hstr *)malloc(sizeof(Hstr);p=(Hstr *)malloc(sizeof(Hstr);r=(Hstr *)malloc(sizeof(Hstr);l-length=0; p-length=0;r-length=0;printf(請選擇相關(guān)操作(數(shù)字15控制,輸入0結(jié)束)n);printf(-1.建

2、立串-n);printf(-2.顯示串長度-n);printf(-3.生成與原來相同的串-n);printf(-4.串比較-n);printf(-5.串連接-n);printf(-6.返回值-n);scanf(%c,&w);getchar();while(w)switch(w)case 1:printf(請輸入字符(#結(jié)束):n);scanf(%c,&c);while(c!=#) l-length+;l-chi=c;i+;scanf(%c,&c);printf(串中字符為n);for(i=0;ilength;i+)printf(%c,l-chi); printf(n);break;case 2

3、: printf(串長度為%dn,l-length);break;case 3: for(i=0;ilength;i+) p-chi=l-chi; p-length=l-length; printf(復(fù)制的串中字符為n);for(i=0;ilength;i+)printf(%c,p-chi); printf(n); break;case 4:i=0;printf(請輸入要與原串比較的字符串(#結(jié)束):n);scanf(%c,&c);while(c!=#) r-length+;r-chi=c;i+;scanf(%c,&c);printf(第二個串中字符為n);for(i=0;ilength;i+

4、)printf(%c,r-chi); printf(n); for(i=0;ilength&ilength;i+)if(l-chi!=r-chi)if(l-chi-r-chi)chi-r-chi)0)printf(第一個串大); printf(n);break;if(i=r-length|i=l-length)printf(兩個串一樣大n); break;case5:i=0;printf(請輸入要與原串連接的串(#結(jié)束)n); scanf(%c,&c);while(c!=#)r-length+;r-chi=c;i+;scanf(%c,&c);printf(第二個串中字符為n);for(i=0;

5、ilength;i+)printf(%c,r-chi); printf(n);for(i=0,j=0;ilength;i+,j+)l-chl-length+i=r-chj;l-length=l-length+r-length;printf(連接后第一個串中字符為n);for(i=0;ilength;i+)printf(%c,l-chi); printf(n);break;case 6:i=0;printf(請輸入要找串的起始位置(第幾個字符?)n); scanf(%d,&h); printf(請輸入要找的字符個數(shù)n); scanf(%d,&k); printf(內(nèi)容為:n); for(i=0;

6、ichh-1); h+; printf(n); break;getchar();printf(請選擇相關(guān)操作(數(shù)字16控制,輸入0結(jié)束)n);printf(-1.建立串-n);printf(-2.顯示串長度-n);printf(-3.生成與原來相同的串-n);printf(-4.串比較-n);printf(-5.串連接-n);printf(-6.返回值-n); scanf(%c,&w);getchar();模式匹配#include#include#include#define bool int#define true 1#define false 0typedef structchar *ch

7、;int length;HString;bool assign(HString *t,char *chs)int i=0;char *c=chs,*d=chs;while(ci)/c不為空時進入循環(huán)i+;/計算字符串常量chs的長度if(!i)t-ch=NULL;t-length=0;elset-ch=(char*)malloc(i*sizeof(char);c=t-ch;if(!t-ch)/如果沒有申請到空間return -1;while(*chs)/chs不為空時進入循環(huán)*c+=*chs+;t-length=i;return true;bool insert(HString *s,int

8、pos,HString *t)if(poss-length)return false;if(t-length)/t非空int i=0;if(!(s-ch=(char*)realloc(s-ch,(s-length+t-length)*sizeof(char)exit(-1);for(i=s-length-1;i=pos;i-)s-chi+t-length=s-chi;for(i=0;ilength;i+)s-chpos+i=t-chi;s-length+=t-length;return true;int strLength(HString *s)return s-length;int strC

9、ompare(HString *s,HString *t)int i;for(i=0;ilength&ilength;i+)if(s-chi!=t-chi)return s-chi - t-chi;return s-length - t-length;bool subString(HString *sub,HString *s,int pos,int len)if(pos=s-length|len s-length)return false;if(sub-ch)free(sub-ch);if(!len)sub-ch=NULL;sub-length=0;elseint i=0;sub-ch=(c

10、har*)malloc(len*sizeof(char);for(;ichi=s-chpos+i;sub-length=len;return true;void printStr(HString *t)int i=0;while(i+length)putchar(t-chi-1);/printf(第%d個:%cn,i-1,t-chi-1);putchar(n);int indexBF(HString *s,HString *t,int pos)int i=pos,j=0;if(pos0) return -1;while(i length & j length)if(s-chi=t-chj)i+

11、;j+;elsei=i-j+1;j=0;if(j=t-length)return i-t-length;return -1;int findNext(HString *p,int *next)int i=0,j=-1;next0=-1;while(ilength)while(j=-1|i length & p-chi=p-chj)i+;j+;if(p-chi!=p-chj)nexti=j;elsenexti=nextj;j=nextj;return -1;void findNextString(char *p,int *next)int len=strlen(p);int i=0,j=-1;n

12、ext0=-1;while(ilength;char *c=p-ch;int i=0,j=-1;next0=-1;while(ilength)if(j=-1|ci=cj)i+,j+;if(ci!=cj)nexti=j;elsenexti=nextj;elsej=nextj;int kmpString(char *t,char *p,int pos)int i=pos,j=0,plen=strlen(p),tlen=strlen(t);int *next=(int*)malloc(plen*sizeof(int);findNextString(p,next);while(itlen & jlen

13、gth*sizeof(int);int i=pos,j=0;findNext2(p,next);while(ilength&jlength)if(j=-1|p-chj=t-chi)i+,j+;elsej=nextj;if(j=p-length)return i-j;return -1;int kmp(HString *t,HString *p,int pos)int *next=(int*)malloc(p-length*sizeof(int);int i=pos,j=0;findNext(p,next);while(ilength-p-length)while(j=-1|jlength &

14、p-chj=t-chi)i+;j+;if(j=p-length)return i-p-length;j=nextj;return -1;int main()HString s1,s2;char a100,b100;int pos;puts(輸入主串);gets(a);puts(輸入模式串);gets(b);assign(&s1,a);assign(&s2,b);puts(輸入匹配起始下標);scanf(%d,&pos);printf(%dn,kmp2(&s1,&s2,pos);system(pause);return 0;附錄資料:不需要的可以自行刪除C語言編譯環(huán)境中的調(diào)試功能及常見錯誤提示調(diào)

15、試功能1常用健 : 激活系統(tǒng)菜單: 將光標在編輯窗口和、信息窗口之間切換: 加載一個文件+: 查看程序運行結(jié)果: 得到有關(guān)編輯器在線幫助+: 得到有關(guān)C語言的在線幫助+: 終止正在運行的程序2塊操作 KB: 定義塊首 KK: 定義塊尾 KV: 塊移動 KC: 塊復(fù)制 KY: 塊刪除 KH: 取消塊定義3查找、替換和刪除操作 QF: 查找字符串 QA: 查找并替換字符串 Option: G(全程), B(向文件頭), N(直接替換) Y : 刪除一行 QY: 刪除從光標位置到行末的所有字符編譯中的常見錯誤例析(1)警告類錯誤 XXXdeclare but never used 變量XXX已定義但

16、從未用過。 XXXis assigned a value which is never used 變量XXX已賦值但從未用過。 Code has no effect 程序中含有沒有實際作用的代碼。 Non-portable pointer conversion 不適當(dāng)?shù)闹羔樲D(zhuǎn)換,可能是在應(yīng)該使用指針的地方用了一個非0的數(shù)值。 Possible use of XXXbefore definition 表達式中使用了未賦值的變量 Redeclaration of main 一個程序文件中主函數(shù)main不止一個。 Suspicious pointer conversion 可疑的指針轉(zhuǎn)換。通常是使用

17、了基本類型不匹配的指針。 Unreachable code 程序含有不能執(zhí)行到的代碼。(2)錯誤或致命錯誤 Compound statement missing in function main 程序結(jié)尾缺少括號。 “”expected; “(”expected等 復(fù)合語句或數(shù)組初始化的結(jié)尾缺少“)”;“(”。 Case outside of switch case 不屬于Switch結(jié)構(gòu),多由于switch結(jié)構(gòu)中的花括號不配對所致。 Case statement missing : switch結(jié)構(gòu)中的某個case之后缺少冒號。 Constant expression required 定義

18、數(shù)組時指定的數(shù)組長度不是常量表達式。 Declaration syntax error 結(jié)構(gòu)體或聯(lián)合類型的定義后缺少分號。 Declaration was expected 缺少說明,通常是因為缺少分界符如逗號、分號、右圓括號等所引起的。 Default outside switch Default部分放到了switch結(jié)構(gòu)之外,一般是因為花括號不匹配而引起的。 do statement must have while do語句中缺少相應(yīng)的while部分。 Expression syntax 表達式語法錯。如表達式中含有兩個連續(xù)的運算符 Extra parameter in call fun

19、調(diào)用函數(shù)fun時給出了多余的實參。 Function should return a value 函數(shù)應(yīng)該返回一個值,否則與定義時的說明類型不匹配。 Illegal use of pointer 指針被非法引用,一般是使用了非法的指針運算。 Invalid pointer addition 指針相加非法。一個指針(地址)可以和一個整數(shù)相加,但兩個指針不能相加。 Lvalue required 賦值運算的左邊是不能尋址的表達式。 Misplaced else 程序遇到了沒有配對的else No matching 表達式中的括號不配對。 Pointer required on left side

20、of_ 在“_”運算的左邊只能允許一個指針而不能是一個一般的結(jié)構(gòu)體變量或聯(lián)合類型的變量。 Statement missing; 程序遇到了后面沒有分號的語句。 Too few parameters in call 調(diào)用某個函數(shù)時實參數(shù)目不夠。 Unable to open include file XXXXXXXXXXX 頭文件找不到。 Unexpected 或:或 在不希望的地方使用了或:。 Undefined symbol Xin function fun 函數(shù)fun中的變量X沒有定義。5.連接中的常見錯誤主要錯誤類似于“undefined symbol _print in modula

21、xxx”(print沒有定義),通常是函數(shù)名書寫錯誤。6.運行中的常見錯誤Abnormal program termination 程序異常終止。通常是由于內(nèi)存使用不當(dāng)所致。Floating point error : Domain 或Divide by 0 運算結(jié)果不是一個數(shù)或被0 除Null pointer assignment 對未初始化的指針賦值,程序有嚴重錯誤。User break 在運行程序時終止。7.程序的跟蹤調(diào)試利用Run菜單可以進行程序的跟蹤調(diào)試(1)GO to Cursor ()選擇該選項使程序執(zhí)行到光標所在行首先將光標移到某行(一般為可執(zhí)行),選擇該功能項,則程序執(zhí)行到該

22、行的前一行暫停。此時程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫停處,此時可以查詢變量或表達式的值。(2)Trace into ()執(zhí)行一條語句或一行暫停此時程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫停處。該選項可跟蹤到被調(diào)函數(shù)的內(nèi)部。(3)Step over ()執(zhí)行一條語句或一行暫停此時程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫停處。該選項將自定義函數(shù)當(dāng)作一個語句執(zhí)行,不跟蹤到函程序的內(nèi)部。(4)Debug 菜單程序處于跟蹤狀態(tài)時,可使用該菜單的選項。其主要是使用Evaluate目的是查詢或更新變量或表達式的值。選擇Evaluate功能后,系統(tǒng)彈出一個對話框。該對話框包含三個選項區(qū)域:Evaluate域

23、可以輸入一個含有目前代碼中(程序暫停區(qū)的作用域)正在使用的變量名、或含變量的表達式、或常量表達式。按回車鍵后,在Result域中顯示變量或表達式的值。還可以用New value域進行調(diào)試。如果調(diào)試程序時發(fā)現(xiàn)Result域顯示的某變量或表達式的值不正確,并能估計出該變量或表達式的值,則可以將該值輸入到New value域,繼續(xù)執(zhí)行程序,其目的是肯定錯誤發(fā)生處是否在當(dāng)前位置之前。如果輸入這個正確的值并將程序繼續(xù)執(zhí)行完畢而結(jié)果正確,說明在目前暫停處之前已經(jīng)發(fā)生錯誤而之后無錯誤。(5)Break/Watch用于設(shè)置斷點和監(jiān)視表達式。選擇Add Watch功能選項,系統(tǒng)將彈出一個菜單,在Add Watc

24、h框中輸入變量名或表達式,按回車鍵后,系統(tǒng)在屏幕底部開辟一個窗口并顯示 該變量或表達式的值?!境R婂e誤信息語句索引】Ambiguous operators need parentheses:不明確的運算需要用括號括起 Ambiguous symbol xxx :不明確的符號 Argument list syntax error:參數(shù)表語法錯誤 Array bounds missing in function main 缺少數(shù)組界限符 Array bounds missing :丟失數(shù)組界限符 Array size too large :數(shù)組尺寸太大 Bad character in param

25、enters :參數(shù)中有不適當(dāng)?shù)淖址?Bad file name format in include directive :包含命令中文件名格式不正確 Bad ifdef directive synatax :編譯預(yù)處理ifdef有語法錯 Bad undef directive syntax :編譯預(yù)處理undef有語法錯 Bit field too large :位字段太長 Call of non-function :調(diào)用未定義的函數(shù) Call to function with no prototype :調(diào)用函數(shù)時沒有函數(shù)的說明 Cannot modify a const object :

26、不允許修改常量對象 Case outside of switch :漏掉了case 語句 Case syntax error :Case 語法錯誤 Code has no effect :代碼不可述不可能執(zhí)行到 Compound statement missing :分程序漏掉 Conflicting type modifiers :不明確的類型說明符 Constant expression required :要求常量表達式 Constant out of range in comparison :在比較中常量超出范圍 Conversion may lose significant digi

27、ts :轉(zhuǎn)換時會丟失意義的數(shù)字 Conversion of near pointer not allowed :不允許轉(zhuǎn)換近指針 Could not find file xxx :找不到XXX文件 Declaration missing ; :說明缺少; Declaration syntax error :說明中出現(xiàn)語法錯誤 Default outside of switch :Default 出現(xiàn)在switch語句之外 Define directive needs an identifier :定義編譯預(yù)處理需要標識符 Division by zero :用零作除數(shù) Do statement

28、 must have while :Do-while語句中缺少while部分 Enum syntax error :枚舉類型語法錯誤 Enumeration constant syntax error :枚舉常數(shù)語法錯誤 Error directive :xxx :錯誤的編譯預(yù)處理命令 Error writing output file :寫輸出文件錯誤 Expression syntax error :表達式語法錯誤 Extra parameter in call :調(diào)用時出現(xiàn)多余錯誤 File name too long :文件名太長 Function call missing ) :函數(shù)

29、調(diào)用缺少右括號 Fuction definition out of place :函數(shù)定義位置錯誤 Fuction should return a value :函數(shù)必需返回一個值 Goto statement missing label :Goto語句沒有標號 Hexadecimal or octal constant too large :16進制或8進制常數(shù)太大 Illegal character x :非法字符x Illegal initialization :非法的初始化 Illegal octal digit :非法的8進制數(shù)字 Illegal pointer subtractio

30、n :非法的指針相減 Illegal structure operation :非法的結(jié)構(gòu)體操作 Illegal use of floating point :非法的浮點運算 Illegal use of pointer :指針使用非法 Improper use of a typedefsymbol :類型定義符號使用不恰當(dāng) In-line assembly not allowed :不允許使用行間匯編 Incompatible storage class :存儲類別不相容 Incompatible type conversion :不相容的類型轉(zhuǎn)換 Incorrect number form

31、at :錯誤的數(shù)據(jù)格式 Incorrect use of default Default使用不當(dāng) Invalid indirection 無效的間接運算 Invalid pointer addition 指針相加無效 Irreducible expression tree 無法執(zhí)行的表達式運算 Lvalue required 需要邏輯值0或非0值 Macro argument syntax error 宏參數(shù)語法錯誤 Macro expansion too long 宏的擴展以后太長 Mismatched number of parameters in definition 定義中參數(shù)個數(shù)不匹

32、配 Misplaced break 此處不應(yīng)出現(xiàn)break語句 Misplaced continue 此處不應(yīng)出現(xiàn)continue語句 Misplaced decimal point 此處不應(yīng)出現(xiàn)小數(shù)點 Misplaced elif directive 不應(yīng)編譯預(yù)處理elif Misplaced else 此處不應(yīng)出現(xiàn)else Misplaced else directive 此處不應(yīng)出現(xiàn)編譯預(yù)處理else Misplaced endif directive 此處不應(yīng)出現(xiàn)編譯預(yù)處理endif Must be addressable 必須是可以編址的 Must take address of m

33、emory location 必須存儲定位的地址 No declaration for function xxx 沒有函數(shù)xxx的說明 No stack 缺少堆棧 No type information 沒有類型信息 Non-portable pointer assignment 不可移動的指針(地址常數(shù))賦值 Non-portable pointer comparison 不可移動的指針(地址常數(shù))比較 Non-portable pointer conversion 不可移動的指針(地址常數(shù))轉(zhuǎn)換 Not a valid expression format type 不合法的表達式格式 No

34、t an allowed type 不允許使用的類型 Numeric constant too large 數(shù)值常太大 Out of memory 內(nèi)存不夠用 Parameter xxx is never used 能數(shù)xxx沒有用到 Pointer required on left side of - 符號-的左邊必須是指針 Possible use of xxx before definition 在定義之前就使用了xxx(警告) Possibly incorrect assignment 賦值可能不正確 Redeclaration of xxx 重復(fù)定義了xxx Redefinition

35、 of xxx is not identical xx的兩次定義不一致 Register allocation failure 寄存器定址失敗 Repeat count needs an lvalue 重復(fù)計數(shù)需要邏輯值 Size of structure or array not known 結(jié)構(gòu)體或數(shù)給大小不確定 Statement missing ; 語句后缺少; Structure or union syntax error X構(gòu)體或聯(lián)合體語法錯誤 Structure size too large 結(jié)構(gòu)體尺寸太大 Sub scripting missing 下標缺少右方括號 Super

36、fluous & with function or array 函數(shù)或數(shù)組中有多余的& Suspicious pointer conversion 可疑的指針轉(zhuǎn)換 Symbol limit exceeded 符號超限 Too few parameters in call 函數(shù)調(diào)用時的實參少于函數(shù)的參數(shù)不 Too many default cases Default太多(switch語句中一個) Too many error or warning messages 錯誤或警告信息太多 Too many type in declaration 說明中類型太多 Too much auto memory in functi

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論