




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、6.46.4字符串及應用字符串及應用 1.1.字符串的定義字符串的定義 字符串:帶有全0結束符號的有限個字符的字符序列。2.2.字符串的書寫表示字符串的書寫表示 用雙引號括起:computer,Begin等,“A”也是一個字符串,而a只是一個字符;在字符 串中空格也是有效字符。如My name is Time. 3.3.字符串的存儲形式:字符串的存儲形式: 以“computer”為例 如右圖為什么以全0為字符串結束符? 因為任何有效字符的ASCII碼值都不可能是全0!例例 問題問題 4.4.字符數(shù)組字符數(shù)組 1)含義:數(shù)組元素全部是字符的ASCII碼值。2)定義(一般形式): char數(shù)組名元
2、素個數(shù); char ch30; char str50; 或const char N=50; . char stringN;3)字符數(shù)組存儲形式:存入字符的ASCII碼,但不會自動補入全0符(0)。4)字符數(shù)組的輸入與輸出:用傳統(tǒng)方式:下標方式,逐字符輸入/輸出。例例 5.5.字符串常量和字符串變量字符串常量和字符串變量 1)字符串常量:帶結束符號的有限個字符的字符序列(結束符0)。2)字符串變量:先定義,后使用! 基類型為字符類型的數(shù)組變量(或用指向字符的指針表示)。 表示:以字符數(shù)組方式表示,但必有結束符03) 字符串長度:字符串中有效字符個數(shù),其中包括空格及轉義字符(全0結束符不計在內)。
3、 盡管轉義字符在完全符合字符串中占了幾個字符位置,但只當一個字符計算其長度。4)一個字符串常量的存儲空間:字符串長度再加上一個結束符號0所占空間。 5)字符串變量初始化: 特別要注意存儲空間大小,應包含結束符0的位置。 比較理想的形式:char name=Zhongshan University; 編譯程序(C/C+)會自己設計出所需存儲空間大小進行分配(已包含結束符0所占用位置)。 注意注意 6.6.字符串數(shù)組字符串數(shù)組 1)含義:數(shù)組元素均為字符串。(實際上是一個二維數(shù)組) 2)缺陷(字符串) 數(shù)組定義時必須確定數(shù)組(字符串)長度,當出現(xiàn)長度大于預定長度時,就引起越界存儲錯誤。 當實際字符
4、串長度小于預定長度時,就造成浪費。3)改進辦法:把字符串數(shù)組轉化為指針數(shù)組 7.7.常用字符串處理函數(shù)常用字符串處理函數(shù) 文件包含#include1)求字符串長度:unsigned int strlen(const char* str); 功能:求string所指字符串的字符個數(shù)(不計0)2)字符串復制:char* strcpy(char* str1,const char* str2); 功能:把str2所指字符串復制到str1所指區(qū)域中去。 當str2所指字符中長度大于str1所指區(qū)域的長度時,會出現(xiàn)越界寫入錯誤(str1必須經過初始化)。注意注意 3)字符串中連接:char* strcat
5、(char* s,const char* t); 功能:把t所指字符串連接到s所指字符串末尾,形成一個新字符串。傳統(tǒng)的連接函數(shù)執(zhí)行是有風險的,因為當s所指字符串所分配的空間不夠時,指針t所指字符串連接過來就造成了越界存儲,數(shù)組的越界訪問是難以發(fā)現(xiàn)且相當危險的事情,因為它可能改變其它存儲空間的內容(字符串復制函數(shù)strcpy()也存在這個問題)。解決的方法是利用動態(tài)空間申請new和動態(tài)空間撤銷delete,根據實際需要合理地分配存儲空間(關于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;根據類似思想,讀者不難自己設計出strcpy()改進方案4)字符串比較(依字典排序):int strcmp(const char* s,const char* t); 5)輸入一字符串: 例: 設已有char strN;設N夠大 int gets(st
7、r); 6)輸出str所指字符串:int puts(str); (設有char strN;(N 足夠大),可用:cinstr;.cout來實現(xiàn)。在某些特殊場合中,可能無法借助人工外部輸入來為程序執(zhí)行提供數(shù)據,而希望程序能自動從執(zhí)行程序的命令行中來獲得執(zhí)行所需的數(shù)據。(2)命令行是什么?下面以一個Dos操作系統(tǒng)的命令為例。在Dos環(huán)0境下,我們經常使用形如下述的命令來復制文件: copy a:filea.dat d:filed.dat在這一個命令行中,copy是復制文件的命令(實際是執(zhí)行程序名);而a:filea.dat和d:filed.dat是兩個執(zhí)行參數(shù)。這一個命令的含義是:把a盤中的fil
8、ea.dat復制到d盤中并以filed.dat命名。復制結束后,a盤中的filea.dat文件和d盤中的filed.dat文件內容相同。 要完成復制工作,就要執(zhí)行復制程序,并從命令行中獲得源文件和目標文件的信息。人們只需要發(fā)出上述的復制命令,程序被執(zhí)行時,操作系統(tǒng)將自動讀取所給出的參數(shù)并執(zhí)行。 若把copy也當作一個參數(shù),則上述命令中包含了三個參數(shù)段:命令段copy;源文件a:filea.dat;目標文件d:filed.dat,總共三個參數(shù)段,缺一不可。(3)數(shù)字字符串轉換成整數(shù)或實數(shù)如果程序執(zhí)行時所需要的參數(shù)不是字符串而是整數(shù)或實數(shù)時,我們還得想辦法把數(shù)字字符串轉換為整數(shù)或實數(shù)。C和C+已為
9、我們提供了這些轉換函數(shù),它們被組織在stdlib.h里面。以下是常用轉換函數(shù)原型:把指針S所指向的數(shù)字字符串轉換為整數(shù)(int)int atoi(const char*s);把指針S所指向的數(shù)字字符串轉換成實數(shù)(double)double atof(const char*s);把指針S所向數(shù)字字符串轉換成長整型數(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是一個整數(shù),表示傳給
10、主函數(shù)的命令行參數(shù)個數(shù),其實際值是實際參數(shù)加1(把命令本身也當作一個參數(shù));argv是一個指針數(shù)組,argv0指向命令名(包含路徑);argv1指向執(zhí)行程序名后的第一個參數(shù),argv2為執(zhí)行程序名后的第二個參數(shù),.以此類推。env也是一個指針數(shù)組,env的每一個元素將指示相關的環(huán)境值(作為一般用戶實際沒有必要去詳細了解它)。也可以使用其他用戶自定義標識符來作為主函數(shù)形參表中的形參名。(5)主函數(shù)帶參數(shù)的例子(主函數(shù)帶2個參數(shù))設計一個名為sumint的程序。其功能為:在編譯、連接獲得可執(zhí)行文件sumint.exe以后,在操作系統(tǒng)環(huán)境下,輸入 sumint m n 以后,程序就自動計算從m到n之
11、間的所有自然數(shù)之各并輸出(其中,0mn32000)。設輸入為sumint 15 31200 則執(zhí)行程序時,系統(tǒng)會自動計數(shù)得argc為3;而其它參數(shù)則如下圖所示:指針數(shù)組argv各元素分別指向各參數(shù)段(字符串形式)。值得注意的是,程序執(zhí)行時要求以自然數(shù)形式進行計算,所以就要求把數(shù)字字符串轉換為整數(shù)。綜上所述,可得到如下程序:#include /文件名sumint.cpp#include /使用形式sumint m nvoid main(int argc,char* argv) /不必觀察運行參數(shù) int m,n,i;long sum=0; if(argc!=3) coutnUsage:sumin
12、t m nn; return; m=atoi(argv1;n=atoi(argv2); /轉換操作數(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ù)的第二個例子(主函數(shù)帶三個參數(shù))設計出一個名為calcul.cpp的程序,編譯、連接得到可執(zhí)行文件calcul.exe,在操作系統(tǒng)環(huán)境下,輸入: calcul 操作數(shù)1 運算符 操作數(shù)2 以后,能自動判別完成計算并輸出結果。其中運算符只能是+,-,*,/;要求完成
13、計算的同時,輸出相關參數(shù)供程序員分析。根據前面介紹的原則,不難得到下面的程序。#include /程序名:calcul.cpp#include /使用: calcul m 運算符 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; /輸出運行環(huán)境 coutEnv1:env1endl; /參數(shù),供參考 coutEnv2:env2endl; /也可不必查看 coutEnv3:env3endl; /此類參數(shù) coutExp: argv1argv2argv3endl; /輸出原來輸入的表達式,供檢查 first=atof(argv1); /轉換參加運算的數(shù) second=atof(argv3); strcpy(str,argv2); /獲取運算符 opr=str0; switch(opr) /判別執(zhí)行什么運算 case +: result=first+second;break; case -: result=first-second;break; case
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年VB試題全景及答案概述
- 2025年軟件設計師職業(yè)規(guī)劃與目標設定試題及答案
- 鋪設成功之路的個人策略計劃
- 財務問題解決能力的提升策略計劃
- 2025年的房地產租賃合同
- 主管如何應對團隊變化計劃
- 軟件設計師考試中的創(chuàng)新思維試題及答案
- 2025建筑裝飾合同模板范本(律師制定版本)
- 2025【生態(tài)保護區(qū)電力工程承包合同】 解除合同及補償政策
- 法學概論與實際法律職業(yè)的關系試題及答案
- 活動板房制作安裝施工合同
- 登高車高空作業(yè)施工方案
- 2024版抗腫瘤藥物相關肝損傷診療指南解讀
- 2024年合肥市網約配送員技能競賽理論考試題庫(含答案)
- 麻醉藥品和精神藥品管理培訓-2
- 長江散貨碼頭建設工程項目可行性研究報告
- OTN在地鐵行業(yè)中的應用
- 創(chuàng)新方法與創(chuàng)新設計智慧樹知到期末考試答案章節(jié)答案2024年青島科技大學
- 大學體育與健康智慧樹知到期末考試答案章節(jié)答案2024年齊魯師范學院
- 產品全生命周期管理流程
- 2006用工合同范本
評論
0/150
提交評論