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

下載本文檔

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

文檔簡(jiǎn)介

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(請(qǐng)選擇相關(guān)操作(數(shù)字15控制,輸入0結(jié)束)n);printf(-1.建

2、立串-n);printf(-2.顯示串長(zhǎng)度-n);printf(-3.生成與原來(lái)相同的串-n);printf(-4.串比較-n);printf(-5.串連接-n);printf(-6.返回值-n);scanf(%c,&w);getchar();while(w)switch(w)case 1:printf(請(qǐng)輸入字符(#結(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(串長(zhǎng)度為%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(請(qǐng)輸入要與原串比較的字符串(#結(jié)束):n);scanf(%c,&c);while(c!=#) r-length+;r-chi=c;i+;scanf(%c,&c);printf(第二個(gè)串中字符為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(第一個(gè)串大); printf(n);break;if(i=r-length|i=l-length)printf(兩個(gè)串一樣大n); break;case5:i=0;printf(請(qǐng)輸入要與原串連接的串(#結(jié)束)n); scanf(%c,&c);while(c!=#)r-length+;r-chi=c;i+;scanf(%c,&c);printf(第二個(gè)串中字符為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(連接后第一個(gè)串中字符為n);for(i=0;ilength;i+)printf(%c,l-chi); printf(n);break;case 6:i=0;printf(請(qǐng)輸入要找串的起始位置(第幾個(gè)字符?)n); scanf(%d,&h); printf(請(qǐng)輸入要找的字符個(gè)數(shù)n); scanf(%d,&k); printf(內(nèi)容為:n); for(i=0;

6、ichh-1); h+; printf(n); break;getchar();printf(請(qǐng)選擇相關(guān)操作(數(shù)字16控制,輸入0結(jié)束)n);printf(-1.建立串-n);printf(-2.顯示串長(zhǎng)度-n);printf(-3.生成與原來(lái)相同的串-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不為空時(shí)進(jìn)入循環(huán)i+;/計(jì)算字符串常量chs的長(zhǎng)度if(!i)t-ch=NULL;t-length=0;elset-ch=(char*)malloc(i*sizeof(char);c=t-ch;if(!t-ch)/如果沒(méi)有申請(qǐng)到空間return -1;while(*chs)/chs不為空時(shí)進(jìn)入循環(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個(gè):%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(輸入匹配起始下標(biāo));scanf(%d,&pos);printf(%dn,kmp2(&s1,&s2,pos);system(pause);return 0;附錄資料:不需要的可以自行刪除C語(yǔ)言編譯環(huán)境中的調(diào)試功能及常見(jiàn)錯(cuò)誤提示調(diào)

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

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

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

18、數(shù)組時(shí)指定的數(shù)組長(zhǎng)度不是常量表達(dá)式。 Declaration syntax error 結(jié)構(gòu)體或聯(lián)合類型的定義后缺少分號(hào)。 Declaration was expected 缺少說(shuō)明,通常是因?yàn)槿鄙俜纸绶缍禾?hào)、分號(hào)、右圓括號(hào)等所引起的。 Default outside switch Default部分放到了switch結(jié)構(gòu)之外,一般是因?yàn)榛ɡㄌ?hào)不匹配而引起的。 do statement must have while do語(yǔ)句中缺少相應(yīng)的while部分。 Expression syntax 表達(dá)式語(yǔ)法錯(cuò)。如表達(dá)式中含有兩個(gè)連續(xù)的運(yùn)算符 Extra parameter in call fun

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

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

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

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

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

24、h框中輸入變量名或表達(dá)式,按回車(chē)鍵后,系統(tǒng)在屏幕底部開(kāi)辟一個(gè)窗口并顯示 該變量或表達(dá)式的值?!境R?jiàn)錯(cuò)誤信息語(yǔ)句索引】Ambiguous operators need parentheses:不明確的運(yùn)算需要用括號(hào)括起 Ambiguous symbol xxx :不明確的符號(hào) Argument list syntax error:參數(shù)表語(yǔ)法錯(cuò)誤 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有語(yǔ)法錯(cuò) Bad undef directive syntax :編譯預(yù)處理undef有語(yǔ)法錯(cuò) Bit field too large :位字段太長(zhǎng) Call of non-function :調(diào)用未定義的函數(shù) Call to function with no prototype :調(diào)用函數(shù)時(shí)沒(méi)有函數(shù)的說(shuō)明 Cannot modify a const object :

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

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

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

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

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

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

32、配 Misplaced break 此處不應(yīng)出現(xiàn)break語(yǔ)句 Misplaced continue 此處不應(yīng)出現(xiàn)continue語(yǔ)句 Misplaced decimal point 此處不應(yīng)出現(xiàn)小數(shù)點(diǎn) 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 必須存儲(chǔ)定位的地址 No declaration for function xxx 沒(méi)有函數(shù)xxx的說(shuō)明 No stack 缺少堆棧 No type information 沒(méi)有類型信息 Non-portable pointer assignment 不可移動(dòng)的指針(地址常數(shù))賦值 Non-portable pointer comparison 不可移動(dòng)的指針(地址常數(shù))比較 Non-portable pointer conversion 不可移動(dòng)的指針(地址常數(shù))轉(zhuǎn)換 Not a valid expression format type 不合法的表達(dá)式格式 No

34、t an allowed type 不允許使用的類型 Numeric constant too large 數(shù)值常太大 Out of memory 內(nèi)存不夠用 Parameter xxx is never used 能數(shù)xxx沒(méi)有用到 Pointer required on left side of - 符號(hào)-的左邊必須是指針 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ù)計(jì)數(shù)需要邏輯值 Size of structure or array not known 結(jié)構(gòu)體或數(shù)給大小不確定 Statement missing ; 語(yǔ)句后缺少; Structure or union syntax error X構(gòu)體或聯(lián)合體語(yǔ)法錯(cuò)誤 Structure size too large 結(jié)構(gòu)體尺寸太大 Sub scripting missing 下標(biāo)缺少右方括號(hào) Super

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論