《C語言程序設(shè)計(jì)》10 字符串寫字字帖_第1頁
《C語言程序設(shè)計(jì)》10 字符串寫字字帖_第2頁
《C語言程序設(shè)計(jì)》10 字符串寫字字帖_第3頁
《C語言程序設(shè)計(jì)》10 字符串寫字字帖_第4頁
《C語言程序設(shè)計(jì)》10 字符串寫字字帖_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第十章字符串12回顧函數(shù)的作用函數(shù)的聲明格式和各部分作用函數(shù)中的實(shí)參和形參的區(qū)別函數(shù)的調(diào)用3目標(biāo)字符信息在計(jì)算機(jī)中的描述字符信息的存儲方式字符信息的處理函數(shù)4字符串字符型數(shù)組可以存放若干個(gè)字符,這些字符合在一起代表一個(gè)完整的語義,如員工的名字,而這一組字符就被稱作為字符串。ZENGCOBRAchara='z';charb='e';charc='n';chard='g';chare='c';charf='o';charg='b';charh='r';chari='a';描述完整信息時(shí),變量定義太多,使用不方便字符變量可以存儲字符chara='Y';chara='N';5字符串字符數(shù)組是存放字符型數(shù)據(jù)的數(shù)組,其中每個(gè)數(shù)組元素存放的值都是單個(gè)字符。字符串是程序設(shè)計(jì)中必不可少的一種數(shù)據(jù)類型,它是由若干個(gè)字符組成的,并且用雙引號括起來表示。在有效字符后,最后一個(gè)字符是結(jié)束標(biāo)記('\0')。HelloWorld\0字符串結(jié)束符6中文字符串中文常用漢字太多,沒有辦法象英文那樣用一個(gè)字節(jié)即256個(gè)數(shù)字就能描述所有英文所需要的字母、數(shù)字、符號等所以計(jì)算機(jī)中的中文通常是采用2個(gè)字節(jié)即64K個(gè)數(shù)字,來描述中文的一些常用漢字、數(shù)字、符號等。ZENGCOBRA\0張三\0英文可以用一個(gè)字節(jié)即256個(gè)數(shù)字就能描述所有英文所需要的字母、數(shù)字、符號等九個(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語言中沒有專門的字符串變量,通常用一個(gè)字符數(shù)組來存放一個(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; /*定義字符串長度計(jì)數(shù)器,并且該計(jì)數(shù)器也做為數(shù)組元素下標(biāo)*/do{scanf("%c",&a[n]);/*讀取第一個(gè)字符存儲到數(shù)組相應(yīng)位置*/if(('A'<=a[n])&&(a[n]<='Z')) /*判斷寫入到數(shù)組中的元素是否是大寫字母*/a[n]+=32; /*如果是大寫字母則在其上加上32,變?yōu)樾懽帜?/n++;/*位置后移一個(gè)*/}while(a[n-1]!='\n');/*判斷輸入的字符是否是回車,如果是則推出循環(huán)*/n=n-1;/*n減一后當(dāng)前下標(biāo)定位到最后輸入的回車符*/for(inti=0;i<=n;i++)

/*通過循環(huán)輸出了數(shù)組中的所有元素,包括最后的回車符,如果循環(huán)判斷條件變?yōu)?lt;n,則輸出到回車換行前*/printf("%c",a[i]);}字符數(shù)組示例(一)9

#include"stdio.h"voidmain(){ chars1[40]; printf("%s","請輸入員工姓名,回車鍵結(jié)束\n"); scanf("%s",s1); //經(jīng)過相應(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)庫字符串處理函數(shù),程序前應(yīng)該包含:

#include<string.h>size_t類型strlen(字符串)size_t實(shí)際上是在string.h頭文件中定義的unsigned無符號整數(shù)類型,意味著函數(shù)的返回值即所求得的字符串的長度為非負(fù)數(shù)。測試指定字符串的長度除字符串結(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的長度:%d\n",length); length=strlen(s1); printf("用字符串初始化數(shù)組的長度:%d\n",length);

strlen示例(一)12strlen示例(二)

length=strlen(s2); printf("用單個(gè)字符依次初始化數(shù)組中元素的數(shù)組長度:%d\n",length); length=strlen(s3); printf("用單個(gè)字符依次初始化數(shù)組中元素,并手動(dòng)加上字符串結(jié)束標(biāo)記的數(shù)組長度:%d\n",length); getchar(); return0;}strlen函數(shù)計(jì)算字符串長度時(shí),類似于我們使用%s格式控制符輸出數(shù)組中的字符串,它不會事先計(jì)算數(shù)組中字符串的長度,只是單純的依次讀取數(shù)組中的元素,直到遇到字符串結(jié)束標(biāo)記13字符串處理函數(shù)(二)strcpy(字符數(shù)組,字符串)第二個(gè)參數(shù)作為原字符串可以是字符串,也可以是包含字符串的字符數(shù)組;第一個(gè)參數(shù)作為目的地只能是存儲字符串的字符數(shù)組。將一個(gè)字符串中的所有字符復(fù)制到另一個(gè)字符串中#include"stdio.h"#include"string.h"voidmain(){ charsource[]="zengcobra"; chardestin[40];//必須事先指定數(shù)組的長度

strcpy(destin,source);//將原數(shù)組中的內(nèi)容寫入到目的數(shù)組中

printf("原字符串:%s\n",source); printf("目的字符串:%s\n",destin);strcpy(destination,“isaniceguy”);//連接上一個(gè)字符串常量

printf("%s\n",destination);}

14字符串處理函數(shù)(二)目的字符串的長度必須事先定義好,而且還要足夠大。像這樣的定義是不行的:會直接報(bào)編譯錯(cuò)誤:unknownsize,表明目的字符數(shù)組的長度未知chardestination[];strcpy(destination,source);strcpy(字符數(shù)組,字符串)將一個(gè)字符串中的所有字符復(fù)制到另一個(gè)字符串中即便在目的字符數(shù)組聲明時(shí)指定了長度,也要保證長度足夠大,能容納得了原字符串。否則就會出現(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ù)組無法存儲連接的字符串。同時(shí)也要注意數(shù)組聲明時(shí),長度為兩個(gè)代連接字符串有效字符個(gè)數(shù)的基礎(chǔ)上加1比如第一個(gè)字符串為”zengcobra”包含10個(gè)有效字符,而第二個(gè)字符串”isaniceguy”包含13個(gè)有效字符,那么數(shù)組長度必須要設(shè)定為24個(gè)元素。否則就會出現(xiàn)運(yùn)行時(shí)錯(cuò)誤:17二維字符數(shù)組知道了二維數(shù)組作為一個(gè)整體,能夠存儲更大的數(shù)據(jù)量,并且代表更加復(fù)雜的語義。其實(shí)二維數(shù)組比較多的應(yīng)用是在字符串的應(yīng)用中。我們可以通過二維字符數(shù)組來表示若干個(gè)具備整體意義的字符串。悄悄的我走了,正如我輕輕的來;我輕輕的招手,作別西天的云彩。我們可以認(rèn)為每一句詩作為一個(gè)一維字符數(shù)組,然后將四個(gè)一維數(shù)組合并在一起形成一個(gè)二維數(shù)組,數(shù)組中的每一行就是一句詩18#include"stdio.h"intmain(){charpoem[10][40];intlength;printf("請輸入詩的名字\n");scanf("%s",poem[0]);//利用scanf函數(shù),對二維數(shù)組中的一行賦值

printf("請輸入作者的名字\n");scanf("%s",poem[1]);printf("請輸入詩句,每輸入一句請敲擊回車鍵,結(jié)束請敲擊#鍵\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("請輸入員工姓名,每個(gè)姓名以回車分隔,最后以#結(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論