版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、6.46.4字符串及應(yīng)用字符串及應(yīng)用 1.1.字符串的定義字符串的定義 字符串:帶有全0結(jié)束符號(hào)的有限個(gè)字符的字符序列。2.2.字符串的書寫表示字符串的書寫表示 用雙引號(hào)括起:computer,Begin等,“A”也是一個(gè)字符串,而a只是一個(gè)字符;在字符 串中空格也是有效字符。如My name is Time. 3.3.字符串的存儲(chǔ)形式:字符串的存儲(chǔ)形式: 以“computer”為例 如右圖為什么以全0為字符串結(jié)束符? 因?yàn)槿魏斡行ё址腁SCII碼值都不可能是全0!例例 問(wèn)題問(wèn)題 4.4.字符數(shù)組字符數(shù)組 1)含義:數(shù)組元素全部是字符的ASCII碼值。2)定義(一般形式): char數(shù)組名元
2、素個(gè)數(shù); char ch30; char str50; 或const char N=50; . char stringN;3)字符數(shù)組存儲(chǔ)形式:存入字符的ASCII碼,但不會(huì)自動(dòng)補(bǔ)入全0符(0)。4)字符數(shù)組的輸入與輸出:用傳統(tǒng)方式:下標(biāo)方式,逐字符輸入/輸出。例例 5.5.字符串常量和字符串變量字符串常量和字符串變量 1)字符串常量:帶結(jié)束符號(hào)的有限個(gè)字符的字符序列(結(jié)束符0)。2)字符串變量:先定義,后使用! 基類型為字符類型的數(shù)組變量(或用指向字符的指針表示)。 表示:以字符數(shù)組方式表示,但必有結(jié)束符03) 字符串長(zhǎng)度:字符串中有效字符個(gè)數(shù),其中包括空格及轉(zhuǎn)義字符(全0結(jié)束符不計(jì)在內(nèi))。
3、 盡管轉(zhuǎn)義字符在完全符合字符串中占了幾個(gè)字符位置,但只當(dāng)一個(gè)字符計(jì)算其長(zhǎng)度。4)一個(gè)字符串常量的存儲(chǔ)空間:字符串長(zhǎng)度再加上一個(gè)結(jié)束符號(hào)0所占空間。 5)字符串變量初始化: 特別要注意存儲(chǔ)空間大小,應(yīng)包含結(jié)束符0的位置。 比較理想的形式:char name=Zhongshan University; 編譯程序(C/C+)會(huì)自己設(shè)計(jì)出所需存儲(chǔ)空間大小進(jìn)行分配(已包含結(jié)束符0所占用位置)。 注意注意 6.6.字符串?dāng)?shù)組字符串?dāng)?shù)組 1)含義:數(shù)組元素均為字符串。(實(shí)際上是一個(gè)二維數(shù)組) 2)缺陷(字符串) 數(shù)組定義時(shí)必須確定數(shù)組(字符串)長(zhǎng)度,當(dāng)出現(xiàn)長(zhǎng)度大于預(yù)定長(zhǎng)度時(shí),就引起越界存儲(chǔ)錯(cuò)誤。 當(dāng)實(shí)際字符
4、串長(zhǎng)度小于預(yù)定長(zhǎng)度時(shí),就造成浪費(fèi)。3)改進(jìn)辦法:把字符串?dāng)?shù)組轉(zhuǎn)化為指針數(shù)組 7.7.常用字符串處理函數(shù)常用字符串處理函數(shù) 文件包含#include1)求字符串長(zhǎng)度:unsigned int strlen(const char* str); 功能:求string所指字符串的字符個(gè)數(shù)(不計(jì)0)2)字符串復(fù)制:char* strcpy(char* str1,const char* str2); 功能:把str2所指字符串復(fù)制到str1所指區(qū)域中去。 當(dāng)str2所指字符中長(zhǎng)度大于str1所指區(qū)域的長(zhǎng)度時(shí),會(huì)出現(xiàn)越界寫入錯(cuò)誤(str1必須經(jīng)過(guò)初始化)。注意注意 3)字符串中連接:char* strcat
5、(char* s,const char* t); 功能:把t所指字符串連接到s所指字符串末尾,形成一個(gè)新字符串。傳統(tǒng)的連接函數(shù)執(zhí)行是有風(fēng)險(xiǎn)的,因?yàn)楫?dāng)s所指字符串所分配的空間不夠時(shí),指針t所指字符串連接過(guò)來(lái)就造成了越界存儲(chǔ),數(shù)組的越界訪問(wèn)是難以發(fā)現(xiàn)且相當(dāng)危險(xiǎn)的事情,因?yàn)樗赡芨淖兤渌鎯?chǔ)空間的內(nèi)容(字符串復(fù)制函數(shù)strcpy()也存在這個(gè)問(wèn)題)。解決的方法是利用動(dòng)態(tài)空間申請(qǐng)new和動(dòng)態(tài)空間撤銷delete,根據(jù)實(shí)際需要合理地分配存儲(chǔ)空間(關(guān)于new和delete,將在后面一節(jié)介紹)下面給出后的新字符串連接函數(shù):#includechar* sstrcat(char* ss, const char*
6、 tt)int m, n; char* t; char*str;m=strlen(ss); n=strlen(tt);t=new charn+1;str=new charm+n+1;t=strcpy(t,tt);str=strcpy(str,ss);str=strcat(str,t);delete ss; delete t;return str;根據(jù)類似思想,讀者不難自己設(shè)計(jì)出strcpy()改進(jìn)方案4)字符串比較(依字典排序):int strcmp(const char* s,const char* t); 5)輸入一字符串: 例: 設(shè)已有char strN;設(shè)N夠大 int gets(st
7、r); 6)輸出str所指字符串:int puts(str); (設(shè)有char strN;(N 足夠大),可用:cinstr;.cout來(lái)實(shí)現(xiàn)。在某些特殊場(chǎng)合中,可能無(wú)法借助人工外部輸入來(lái)為程序執(zhí)行提供數(shù)據(jù),而希望程序能自動(dòng)從執(zhí)行程序的命令行中來(lái)獲得執(zhí)行所需的數(shù)據(jù)。(2)命令行是什么?下面以一個(gè)Dos操作系統(tǒng)的命令為例。在Dos環(huán)0境下,我們經(jīng)常使用形如下述的命令來(lái)復(fù)制文件: copy a:filea.dat d:filed.dat在這一個(gè)命令行中,copy是復(fù)制文件的命令(實(shí)際是執(zhí)行程序名);而a:filea.dat和d:filed.dat是兩個(gè)執(zhí)行參數(shù)。這一個(gè)命令的含義是:把a(bǔ)盤中的fil
8、ea.dat復(fù)制到d盤中并以filed.dat命名。復(fù)制結(jié)束后,a盤中的filea.dat文件和d盤中的filed.dat文件內(nèi)容相同。 要完成復(fù)制工作,就要執(zhí)行復(fù)制程序,并從命令行中獲得源文件和目標(biāo)文件的信息。人們只需要發(fā)出上述的復(fù)制命令,程序被執(zhí)行時(shí),操作系統(tǒng)將自動(dòng)讀取所給出的參數(shù)并執(zhí)行。 若把copy也當(dāng)作一個(gè)參數(shù),則上述命令中包含了三個(gè)參數(shù)段:命令段copy;源文件a:filea.dat;目標(biāo)文件d:filed.dat,總共三個(gè)參數(shù)段,缺一不可。(3)數(shù)字字符串轉(zhuǎn)換成整數(shù)或?qū)崝?shù)如果程序執(zhí)行時(shí)所需要的參數(shù)不是字符串而是整數(shù)或?qū)崝?shù)時(shí),我們還得想辦法把數(shù)字字符串轉(zhuǎn)換為整數(shù)或?qū)崝?shù)。C和C+已為
9、我們提供了這些轉(zhuǎn)換函數(shù),它們被組織在stdlib.h里面。以下是常用轉(zhuǎn)換函數(shù)原型:把指針S所指向的數(shù)字字符串轉(zhuǎn)換為整數(shù)(int)int atoi(const char*s);把指針S所指向的數(shù)字字符串轉(zhuǎn)換成實(shí)數(shù)(double)double atof(const char*s);把指針S所向數(shù)字字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)(long)long atol(const char*s);(4)主函數(shù)帶參數(shù)的形式主函數(shù)帶參數(shù)主要有兩種形式:int main(int argc,char* argv);int main(int argc,char* argv,char* env);其中,argc是一個(gè)整數(shù),表示傳給
10、主函數(shù)的命令行參數(shù)個(gè)數(shù),其實(shí)際值是實(shí)際參數(shù)加1(把命令本身也當(dāng)作一個(gè)參數(shù));argv是一個(gè)指針數(shù)組,argv0指向命令名(包含路徑);argv1指向執(zhí)行程序名后的第一個(gè)參數(shù),argv2為執(zhí)行程序名后的第二個(gè)參數(shù),.以此類推。env也是一個(gè)指針數(shù)組,env的每一個(gè)元素將指示相關(guān)的環(huán)境值(作為一般用戶實(shí)際沒(méi)有必要去詳細(xì)了解它)。也可以使用其他用戶自定義標(biāo)識(shí)符來(lái)作為主函數(shù)形參表中的形參名。(5)主函數(shù)帶參數(shù)的例子(主函數(shù)帶2個(gè)參數(shù))設(shè)計(jì)一個(gè)名為sumint的程序。其功能為:在編譯、連接獲得可執(zhí)行文件sumint.exe以后,在操作系統(tǒng)環(huán)境下,輸入 sumint m n 以后,程序就自動(dòng)計(jì)算從m到n之
11、間的所有自然數(shù)之各并輸出(其中,0mn32000)。設(shè)輸入為sumint 15 31200 則執(zhí)行程序時(shí),系統(tǒng)會(huì)自動(dòng)計(jì)數(shù)得argc為3;而其它參數(shù)則如下圖所示:指針數(shù)組argv各元素分別指向各參數(shù)段(字符串形式)。值得注意的是,程序執(zhí)行時(shí)要求以自然數(shù)形式進(jìn)行計(jì)算,所以就要求把數(shù)字字符串轉(zhuǎn)換為整數(shù)。綜上所述,可得到如下程序:#include /文件名sumint.cpp#include /使用形式sumint m nvoid main(int argc,char* argv) /不必觀察運(yùn)行參數(shù) int m,n,i;long sum=0; if(argc!=3) coutnUsage:sumin
12、t m nn; return; m=atoi(argv1;n=atoi(argv2); /轉(zhuǎn)換操作數(shù) if(m=n)|(n=32000) coutnInput error.(0mn32000)n; return; for (i=m;i=n;i+) sum=sum+i; /累加 coutThe sum:sumendl;(6)主函數(shù)帶參數(shù)的第二個(gè)例子(主函數(shù)帶三個(gè)參數(shù))設(shè)計(jì)出一個(gè)名為calcul.cpp的程序,編譯、連接得到可執(zhí)行文件calcul.exe,在操作系統(tǒng)環(huán)境下,輸入: calcul 操作數(shù)1 運(yùn)算符 操作數(shù)2 以后,能自動(dòng)判別完成計(jì)算并輸出結(jié)果。其中運(yùn)算符只能是+,-,*,/;要求完成
13、計(jì)算的同時(shí),輸出相關(guān)參數(shù)供程序員分析。根據(jù)前面介紹的原則,不難得到下面的程序。#include /程序名:calcul.cpp#include /使用: calcul m 運(yùn)算符 n#includevoid main(int argc,char* argv,char* env) char opr,str81; double result,first,second; if(argc!=4) /檢查參數(shù)段是否正確 coutnUsage:number1 operator number2n; exit(0); coutArgc=argcendl; /輸出參數(shù)段數(shù) coutArgv0:argv0endl
14、; /輸出各參數(shù) coutArgv1:argv1endl; coutArgv2:argv2endl; coutArgv3:argv3endl; coutEnv0:env0endl; /輸出運(yùn)行環(huán)境 coutEnv1:env1endl; /參數(shù),供參考 coutEnv2:env2endl; /也可不必查看 coutEnv3:env3endl; /此類參數(shù) coutExp: argv1argv2argv3endl; /輸出原來(lái)輸入的表達(dá)式,供檢查 first=atof(argv1); /轉(zhuǎn)換參加運(yùn)算的數(shù) second=atof(argv3); strcpy(str,argv2); /獲取運(yùn)算符 opr=str0; switch(opr) /判別執(zhí)行什么運(yùn)算 case +: result=first+second;break; case -: result=first-second;break; case
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版八年級(jí)第二學(xué)期期中科學(xué)試題含答案
- 2025版庭院租賃服務(wù)合同范本3篇
- 國(guó)際貨物貿(mào)易合同協(xié)議書范本
- 不動(dòng)產(chǎn)贈(zèng)與附撫養(yǎng)協(xié)議合同
- 舉辦商業(yè)演出活動(dòng)協(xié)議
- 2025-2030全球低氧高原訓(xùn)練系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)紫外激光打標(biāo)機(jī)冷水機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球公共事務(wù)咨詢服務(wù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024年項(xiàng)目部治理人員安全培訓(xùn)考試題及答案(網(wǎng)校專用)
- 2023年-2024年新員工入職前安全教育培訓(xùn)試題附答案【培優(yōu)A卷】
- 高考英語(yǔ)閱讀理解練習(xí)4篇(附解析)
- 巖土工程勘察服務(wù)投標(biāo)方案(技術(shù)方案)
- 新修訂藥品GMP中藥飲片附錄解讀課件
- 五年級(jí)美術(shù)下冊(cè)第9課《寫意蔬果》-優(yōu)秀課件4人教版
- 節(jié)能降耗課件
- 尼爾森數(shù)據(jù)市場(chǎng)分析報(bào)告
- 氧氣霧化吸入法
- 非標(biāo)自動(dòng)化設(shè)備技術(shù)規(guī)格書和驗(yàn)收標(biāo)準(zhǔn)(模板)
- 領(lǐng)導(dǎo)干部個(gè)人有關(guān)事項(xiàng)報(bào)告表(模板)
- GB/T 33141-2016鎂鋰合金鑄錠
- 2023譯林版新教材高中英語(yǔ)必修二全冊(cè)重點(diǎn)短語(yǔ)歸納小結(jié)
評(píng)論
0/150
提交評(píng)論