版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第十章字符串12回顧函數(shù)的作用函數(shù)的聲明格式和各部分作用函數(shù)中的實(shí)參和形參的區(qū)別函數(shù)的調(diào)用3目標(biāo)字符信息在計(jì)算機(jī)中的描述字符信息的存儲(chǔ)方式字符信息的處理函數(shù)4字符串字符型數(shù)組可以存放若干個(gè)字符,這些字符合在一起代表一個(gè)完整的語(yǔ)義,如員工的名字,而這一組字符就被稱(chēng)作為字符串。ZENGCOBRAchara='z';charb='e';charc='n';chard='g';chare='c';charf='o';charg='b';charh='r';chari='a';描述完整信息時(shí),變量定義太多,使用不方便字符變量可以存儲(chǔ)字符chara='Y';chara='N';5字符串字符數(shù)組是存放字符型數(shù)據(jù)的數(shù)組,其中每個(gè)數(shù)組元素存放的值都是單個(gè)字符。字符串是程序設(shè)計(jì)中必不可少的一種數(shù)據(jù)類(lèi)型,它是由若干個(gè)字符組成的,并且用雙引號(hào)括起來(lái)表示。在有效字符后,最后一個(gè)字符是結(jié)束標(biāo)記('\0')。HelloWorld\0字符串結(jié)束符6中文字符串中文常用漢字太多,沒(méi)有辦法象英文那樣用一個(gè)字節(jié)即256個(gè)數(shù)字就能描述所有英文所需要的字母、數(shù)字、符號(hào)等所以計(jì)算機(jī)中的中文通常是采用2個(gè)字節(jié)即64K個(gè)數(shù)字,來(lái)描述中文的一些常用漢字、數(shù)字、符號(hào)等。ZENGCOBRA\0張三\0英文可以用一個(gè)字節(jié)即256個(gè)數(shù)字就能描述所有英文所需要的字母、數(shù)字、符號(hào)等九個(gè)英文字母所占據(jù)的9個(gè)字節(jié)加上1個(gè)字符串結(jié)束標(biāo)記'\0',共10個(gè)字節(jié)。兩個(gè)漢字所占據(jù)的4個(gè)字節(jié)加上1個(gè)字符串結(jié)束標(biāo)記'\0',共5個(gè)字節(jié)7字符串與字符數(shù)組在C語(yǔ)言中沒(méi)有專(zhuān)門(mén)的字符串變量,通常用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串字符數(shù)組和字符串的區(qū)別是:字符串的末尾有一個(gè)空字符‘\0‘字符串可按如下方式聲明并初始化:charname[15]={'z','e','n','g','c','o','b','r','a','\0'};charname[15]="zengcobra";charpassword[]="12345678";省略數(shù)組大小,系統(tǒng)自動(dòng)計(jì)算,大小為后面的字符總數(shù)加1,最后一個(gè)元素存入一個(gè)空字符。系統(tǒng)將自動(dòng)加入一個(gè)空字符手工加入一個(gè)空字符8voidmain(){chara[40]; /*聲明一個(gè)有個(gè)元素的數(shù)組*/intn=0; /*定義字符串長(zhǎng)度計(jì)數(shù)器,并且該計(jì)數(shù)器也做為數(shù)組元素下標(biāo)*/do{scanf("%c",&a[n]);/*讀取第一個(gè)字符存儲(chǔ)到數(shù)組相應(yīng)位置*/if(('A'<=a[n])&&(a[n]<='Z')) /*判斷寫(xiě)入到數(shù)組中的元素是否是大寫(xiě)字母*/a[n]+=32; /*如果是大寫(xiě)字母則在其上加上32,變?yōu)樾?xiě)字母*/n++;/*位置后移一個(gè)*/}while(a[n-1]!='\n');/*判斷輸入的字符是否是回車(chē),如果是則推出循環(huán)*/n=n-1;/*n減一后當(dāng)前下標(biāo)定位到最后輸入的回車(chē)符*/for(inti=0;i<=n;i++)
/*通過(guò)循環(huán)輸出了數(shù)組中的所有元素,包括最后的回車(chē)符,如果循環(huán)判斷條件變?yōu)?lt;n,則輸出到回車(chē)換行前*/printf("%c",a[i]);}字符數(shù)組示例(一)9
#include"stdio.h"voidmain(){ chars1[40]; printf("%s","請(qǐng)輸入員工姓名,回車(chē)鍵結(jié)束\n"); scanf("%s",s1); //經(jīng)過(guò)相應(yīng)的計(jì)算得到員工的工資,這里假設(shè)為。
printf("%s","員工姓名:"); printf("%s",s1); printf("%s","\n員工工資:"); printf("%.2f",3000.0); /*控制輸出,僅輸出兩位小數(shù)*/ return0;}
格式描述串中使用轉(zhuǎn)意字符%s,代表輸入的是字符串字符數(shù)組示例(二)10字符串處理函數(shù)(一)與字符串有關(guān)的內(nèi)置函數(shù)在頭文件string.h中定義要使用標(biāo)準(zhǔn)庫(kù)字符串處理函數(shù),程序前應(yīng)該包含:
#include<string.h>size_t類(lèi)型strlen(字符串)size_t實(shí)際上是在string.h頭文件中定義的unsigned無(wú)符號(hào)整數(shù)類(lèi)型,意味著函數(shù)的返回值即所求得的字符串的長(zhǎng)度為非負(fù)數(shù)。測(cè)試指定字符串的長(zhǎng)度除字符串結(jié)束標(biāo)記外的所有字符的個(gè)數(shù)。11
#include"stdio.h"#include"string.h"intmain(){ chars1[]="zengcobra"; chars2[]={'z','e','n','g','c','o','b','r','a'}; chars3[]={'z','e','n','g','c','o','b','r','a','\0'}; size_tlength=strlen("zengcobra"); printf("字符串zengcobra的長(zhǎng)度:%d\n",length); length=strlen(s1); printf("用字符串初始化數(shù)組的長(zhǎng)度:%d\n",length);
strlen示例(一)12strlen示例(二)
length=strlen(s2); printf("用單個(gè)字符依次初始化數(shù)組中元素的數(shù)組長(zhǎng)度:%d\n",length); length=strlen(s3); printf("用單個(gè)字符依次初始化數(shù)組中元素,并手動(dòng)加上字符串結(jié)束標(biāo)記的數(shù)組長(zhǎng)度:%d\n",length); getchar(); return0;}strlen函數(shù)計(jì)算字符串長(zhǎng)度時(shí),類(lèi)似于我們使用%s格式控制符輸出數(shù)組中的字符串,它不會(huì)事先計(jì)算數(shù)組中字符串的長(zhǎng)度,只是單純的依次讀取數(shù)組中的元素,直到遇到字符串結(jié)束標(biāo)記13字符串處理函數(shù)(二)strcpy(字符數(shù)組,字符串)第二個(gè)參數(shù)作為原字符串可以是字符串,也可以是包含字符串的字符數(shù)組;第一個(gè)參數(shù)作為目的地只能是存儲(chǔ)字符串的字符數(shù)組。將一個(gè)字符串中的所有字符復(fù)制到另一個(gè)字符串中#include"stdio.h"#include"string.h"voidmain(){ charsource[]="zengcobra"; chardestin[40];//必須事先指定數(shù)組的長(zhǎng)度
strcpy(destin,source);//將原數(shù)組中的內(nèi)容寫(xiě)入到目的數(shù)組中
printf("原字符串:%s\n",source); printf("目的字符串:%s\n",destin);strcpy(destination,“isaniceguy”);//連接上一個(gè)字符串常量
printf("%s\n",destination);}
14字符串處理函數(shù)(二)目的字符串的長(zhǎng)度必須事先定義好,而且還要足夠大。像這樣的定義是不行的:會(huì)直接報(bào)編譯錯(cuò)誤:unknownsize,表明目的字符數(shù)組的長(zhǎng)度未知chardestination[];strcpy(destination,source);strcpy(字符數(shù)組,字符串)將一個(gè)字符串中的所有字符復(fù)制到另一個(gè)字符串中即便在目的字符數(shù)組聲明時(shí)指定了長(zhǎng)度,也要保證長(zhǎng)度足夠大,能容納得了原字符串。否則就會(huì)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤。15字符串處理函數(shù)(三)strcat(字符數(shù)組名,字符串)將第二個(gè)字符串接在第一個(gè)字符串的后面,形成一個(gè)新字符串;然后將新產(chǎn)生的字符串保存在一個(gè)數(shù)組中第一參數(shù)是存放有字符串的數(shù)組,在函數(shù)中作為代連接字符串的前半部分,并且新字符串也是保存在這個(gè)數(shù)組中的;而第二個(gè)參數(shù)可以是一個(gè)字符串常量,也可以是一個(gè)字符數(shù)組。#include"stdio.h"#include"string.h"voidmain(){ chars1[40]="zengcobra"; chars2[]="isaniceguy"; printf("第一個(gè)字符串:%s\n",s1); printf("第二個(gè)字符串:%s\n",s2); strcat(s1,s2);//連接之后得到新字符串
printf("連接之后的字符串:%s\n",s1);}s1作為字符串連接的前半段字符串,并且新產(chǎn)生的字符串也被保存在這個(gè)數(shù)組中。s2作為字符數(shù)組,保存了字符串連接的后半段字符串。s2字符數(shù)組也可以換成字符串常量。16字符串處理函數(shù)(三)字符串連接函數(shù)使用時(shí),重要的一點(diǎn)是作為第一個(gè)參數(shù)的字符數(shù)組要足夠大,大到能夠存放連接后產(chǎn)生的新字符串,否則將產(chǎn)生編譯錯(cuò)誤:arrayboundsoverflow,表明數(shù)組越界。即聲明的數(shù)組無(wú)法存儲(chǔ)連接的字符串。同時(shí)也要注意數(shù)組聲明時(shí),長(zhǎng)度為兩個(gè)代連接字符串有效字符個(gè)數(shù)的基礎(chǔ)上加1比如第一個(gè)字符串為”zengcobra”包含10個(gè)有效字符,而第二個(gè)字符串”isaniceguy”包含13個(gè)有效字符,那么數(shù)組長(zhǎng)度必須要設(shè)定為24個(gè)元素。否則就會(huì)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤:17二維字符數(shù)組知道了二維數(shù)組作為一個(gè)整體,能夠存儲(chǔ)更大的數(shù)據(jù)量,并且代表更加復(fù)雜的語(yǔ)義。其實(shí)二維數(shù)組比較多的應(yīng)用是在字符串的應(yīng)用中。我們可以通過(guò)二維字符數(shù)組來(lái)表示若干個(gè)具備整體意義的字符串。悄悄的我走了,正如我輕輕的來(lái);我輕輕的招手,作別西天的云彩。我們可以認(rèn)為每一句詩(shī)作為一個(gè)一維字符數(shù)組,然后將四個(gè)一維數(shù)組合并在一起形成一個(gè)二維數(shù)組,數(shù)組中的每一行就是一句詩(shī)18#include"stdio.h"intmain(){charpoem[10][40];intlength;printf("請(qǐng)輸入詩(shī)的名字\n");scanf("%s",poem[0]);//利用scanf函數(shù),對(duì)二維數(shù)組中的一行賦值
printf("請(qǐng)輸入作者的名字\n");scanf("%s",poem[1]);printf("請(qǐng)輸入詩(shī)句,每輸入一句請(qǐng)敲擊回車(chē)鍵,結(jié)束請(qǐng)敲擊#鍵\n");for(length=2;length<10;length++){二維字符數(shù)組示例(一)19二維字符數(shù)組示例(二)scanf("%s",poem[length]);if(poem[length][0]=='#')/*判斷第length行的第0個(gè)元素是不是為#,如果是則退出*/break;}printf("\n\n%s\n",poem[0]);printf("---%s\n",poem[1]);for(inti=2;i<length;i++){printf("%s\n",poem[i]);}return0;}20#include"stdio.h"#include"string.h"intmain(){chara[10][20],b[20];inti,j,k;printf("請(qǐng)輸入員工姓名,每個(gè)姓名以回車(chē)分隔,最后以#結(jié)束\n");for(i=0;i<10;i++){ gets(a[i])/*利用string.h中定義的gets函數(shù)完成字符串輸入到數(shù)組中*/ if(a[i][0]=='#')/*判斷第i行的第個(gè)元素是不是為#,如果是則退出*/ break;}二維字符數(shù)組示例(三)21二維字符數(shù)組示例(三)for(j=0;j<i;j++) /*選用冒泡排序法,共比較i-1輪*/ for(k=i-1;k>j;k--) /*第i-1輪從下向上共比較i-1-j次*/ if(strcmp(a[k],a[k-1])<0)/*相鄰兩個(gè)比較,小者上調(diào)*/ { strcpy(b,a[k]); strcpy(a[k],a[k-1]); strcpy(a[k-1],b); }
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《硫酸工藝學(xué)》課件
- 二尿素裝置安全課課件
- 《燒傷基礎(chǔ)知識(shí)》課件
- 《湖南鄉(xiāng)土地理》課件
- 《孕婦學(xué)校講課》課件
- 單位管理制度集合大合集職工管理
- 單位管理制度集粹匯編人員管理篇十篇
- 單位管理制度分享匯編【人力資源管理篇】十篇
- 單位管理制度分享大全職員管理篇十篇
- 2024教師安全責(zé)任協(xié)議書(shū)(28篇)
- 2025年國(guó)家圖書(shū)館招聘筆試參考題庫(kù)含答案解析
- 機(jī)器人課程課程設(shè)計(jì)
- 南充市市級(jí)事業(yè)單位2024年公招人員擬聘人員歷年管理單位遴選500模擬題附帶答案詳解
- 9.2溶解度(第2課時(shí))-2024-2025學(xué)年九年級(jí)化學(xué)人教版(2024)下冊(cè)
- 安全知識(shí)考試題庫(kù)500題(含答案)
- 2024-2025學(xué)年上學(xué)期南京小學(xué)數(shù)學(xué)六年級(jí)期末模擬試卷
- 中國(guó)重癥患者腸外營(yíng)養(yǎng)治療臨床實(shí)踐專(zhuān)家共識(shí)(2024)解讀
- 我的專(zhuān)業(yè)成長(zhǎng)故事
- 公司管理制度-公司管理制度
- 井用潛水泵的安裝
- 疫情索賠公式及相應(yīng)表格模板Excel
評(píng)論
0/150
提交評(píng)論