版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章字符串目錄/Contents字符串常量字符串的輸入輸出字符串處理函數(shù)字符數(shù)組和字符指針向函數(shù)傳遞字符串從函數(shù)返回一個(gè)字符串指針問題的提出用雙引號(hào)括起的一串字符是字符串常量,C語(yǔ)言自動(dòng)為其添加′\0′結(jié)束符"Howareyou"Ilovechina\0一串以‘\0’結(jié)尾的字符在C語(yǔ)言中被看做字符串字符串的存儲(chǔ)是字符數(shù)組,但不代表字符串?dāng)?shù)組的最后一個(gè)元素必須是'\0'◆C語(yǔ)言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理◆字符數(shù)組每個(gè)元素都是字符類型的數(shù)組
charstr[80];字符串初始化◆用字符型數(shù)據(jù)對(duì)數(shù)組進(jìn)行初始化charstr[7]={‘H',‘e',‘l',‘l',‘o',‘!’,'\0'};◆用字符串常量直接對(duì)數(shù)組初始化charstr[]={“Hello!"};charstr[]=“Hello!";◆多個(gè)字符串常量直接對(duì)二維數(shù)組初始化
charmonths[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};字符指針定義和初始化方法不同
str=“World";World\0“World"ptrcharstr[6]={“World"};
char*ptr;ptr=“World";strWhy?數(shù)組名str是地址常量
字符指針ptr是變量
char*ptr=“World";字符指針char*ptr="World";*ptr="F";ptr=“HelloWorld!";charstr[]="World";char*ptr=str;prt=“HelloWorld!”;*ptr=“F”;字符指針ptr是變量,可以指向不同的字符串,但不能修改字符串的值,”World”是字符串常量
字符指針要修改字符串中的字符,必須先用字符數(shù)組存儲(chǔ)字符串,再讓字符指針指向該字符數(shù)組字符串的輸入/輸出(逐個(gè)字符輸入)inti=0;while((str[i++]=getchar())!=‘\n’);str[i]=‘\0’;按字符逐個(gè)輸入charstr[10];字符串的輸入/輸出(逐個(gè)字符輸出)按字符逐個(gè)輸入/輸出for(i=0;str[i]!='\0';i++){ putchar(str[i]);}putchar('\n');charstr[10];一般不用字符串長(zhǎng)度控制字符串的輸入/輸出(逐個(gè)字符輸入/輸出)【例9.1】
按%c格式控制符,從鍵盤輸入一個(gè)字符串,并將它顯示出來。#include<stdio.h>#defineN20intmain(){ inti; charstr[N]; printf("Enterastring:"); for(i=0;i<N-1;i++) { scanf("%c",&str[i]); } str[i]=‘\0’; for(i=0;str[i]!='\0';i++) { printf("%c",str[i]); } return0;}字符串的輸入/輸出(整體輸入/輸出)按字符串整體輸入/輸出scanf("%s",str);printf("%s",str);charstr[10];gets(str);puts(str);不能輸入帶空格的字符串可以輸入帶空格的字符串空格、回車或制表(Tab)符是輸入數(shù)據(jù)的分隔符,因而不能被讀入,輸入遇到這些字符時(shí),系統(tǒng)認(rèn)為字符串輸入結(jié)束【例9.2】
按%s格式控制符,從鍵盤輸入一個(gè)字符串,并將它顯示出來。#include<stdio.h>#defineN20intmain(){ charname[N]; printf("Enteryourname:"); scanf("%s",name); printf("Hello%s",name); return0;}字符串的輸入/輸出Why?字符串的輸入/輸出【例9.3】
使用gets()從鍵盤輸入一個(gè)帶空格的字符串,然后使用puts()把它顯示出來。#include<stdio.h>#defineN20intmain(){ charstring[N];char*ptr=string; printf("Enterastring:"); gets(ptr); printf(“Hello%s!\n”,ptr); return0;}不限制輸入字符串的長(zhǎng)度易引起緩沖區(qū)溢出,給黑客攻擊以可乘之機(jī)【例9.3】
使用gets()從鍵盤輸入一個(gè)帶空格的字符串,然后使用puts()把它顯示出來。#include<stdio.h>#defineN20intmain(){ charstring[N]; printf("Enterastring:"); gets(string); puts(string); return0;}#include<stdio.h>#defineN20intmain(){charstring[N];printf("Enterastring:");fgets(string,sizeof(string),stdin);puts(string);return0;}字符串的輸入/輸出例9.3如果用戶輸入的字符個(gè)數(shù)超過了數(shù)組的長(zhǎng)度,導(dǎo)致程序出錯(cuò)或異常終止更安全的方法是用fgets函數(shù)#include<stdio.h>#defineN20intReadLine(charstr[],intn);intmain(){ charstring[N]; intn; printf("Enterastring:"); n=ReadLine(string,N); puts(string); printf("n=%d",n); return0;}intReadLine(charstr[],intn){ charch; inti=0; while((ch=getchar())!='\n') if(i<n) str[i++]=ch; str[i]='\0'; returni;}字符串的輸入/輸出安全靈活!字符串處理函數(shù)◆#include<string.h>strcpy(目的字符串,源字符串);字符串復(fù)制strlen(字符串);字符串長(zhǎng)度strcat(目的字符串,源字符串);字符串連接strcmp(字符串1,字符串2);字符串比較字符串處理函數(shù)◆#include<string.h>strlen(字符串);字符串長(zhǎng)度charstr[10]={"China"};printf("%d",
strlen(str));打印結(jié)果是5、6,還是10?China\0\0\0\0\0不包括\0的實(shí)際字符的個(gè)數(shù)字符串處理函數(shù)◆#include<string.h>strlen(字符串);字符串長(zhǎng)度len=
strlen(str);for(i=0;i<len;i++){ putchar(str[i]);}putchar('\n');用長(zhǎng)度控制字符串輸出字符串處理函數(shù)◆#include<string.h>strcpy(目的字符串,源字符串);字符串復(fù)制字符串能否用=整體復(fù)制?str2=str1;strcpy(str2,str1);注意復(fù)制的方向!str2必須足夠大!想想這個(gè)函數(shù)是如何實(shí)現(xiàn)字符串復(fù)制的?◆#include<string.h>strcat(目的字符串,源字符串);字符串連接strcat(str2,str1);str2必須足夠大!Hello\0\0\0\0\0\0\0
China\0HelloChina\0\0字符串處理函數(shù)◆#include<string.h>strcmp(字符串1,字符串2);字符串比較字符串能否用>、<、==比較大小?if(str2==str1)if(strcmp(str2,str1)==0)字符串處理函數(shù)◆#include<string.h>strcmp(字符串1,字符串2);字符串比較字符串是如何比較大小的?當(dāng)出現(xiàn)第一對(duì)不相等的字符時(shí),就由這兩個(gè)字符決定所在字符串的大小,返回其ASCII碼比較的結(jié)果值comparecomputercompare<computer表示strcmp(str1,str2)<0為真字符串處理函數(shù)#include<stdio.h>#include<string.h>#defineM20#defineN10voidSortName(charstr[][N],intn)intmain(){ inti,n; charname[M][N]; printf("Inputthenumberofpersons:"); scanf("%d",&n); getchar();/*清空緩沖區(qū)*/ printf("Inputtheirnames:\n"); for(i=0;i<n;i++) { gets(name[i]);/*輸入n個(gè)人名*/ } SortName(name,n); printf("Aftersortedresults:\n"); for(i=0;i<n;i++) { puts(name[i]); } return0;}【例9.5】
從鍵盤輸入不超過20人的名字字符串,用函數(shù)編寫這些字符串的排序程序并測(cè)試之。運(yùn)行結(jié)果:(屏幕顯示)Inputthenumberofpersons:3Inputtheirnames:JohnWhitePeterAftersortedresults:JohnPeterWhite字符串處理函數(shù)應(yīng)用voidSortName(charstr[][N],intn){ inti,j; chartemp[N]; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(strcmp(str[j],str[i])<0)/*字符串比較,不能使用關(guān)系運(yùn)算符*/ { strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp); } } }}字符串處理函數(shù)應(yīng)用向函數(shù)傳遞字符串◆向函數(shù)傳遞字符串時(shí),既可使用字符數(shù)組作函數(shù)參數(shù),也可使用字符指針作函數(shù)參數(shù)◆地址傳遞向函數(shù)傳遞字符串【例9.6】
編寫一個(gè)記錄字符串中單詞個(gè)數(shù)的函數(shù),并測(cè)試之。#include<stdio.h>#defineN80intWordCount(constcharstr)intmain(){ chars[N]; intcnt; printf("Inputastring:"); gets(s); cnt=WordCount(s); printf("cnt=%d",cnt); return0;}intWordCount(constcharstr[]){intcount=0;inti=0;while(str[i]!='\0'){while(isspace(str[i]))++i;if(str[i]!='\0'){++count;while(!isspace(str[i])&&str[i]!='\0') ++i;}}returncount; }向函數(shù)傳遞字符串#include<stdio.h>#defineN80intWordCount(constchar*str);intmain(){ chars[N]; intcnt; printf("Inputastring:"); gets(s); cnt=WordCount(s); printf("cnt=%d",cnt); return0;}intWordCount(constchar*str){ intcount=0; while(*str!='\0') { while(isspace(*str)) ++str; if(*str!='\0') { ++count; while(!isspace(*str)&&*str!='\0') ++str; } } returncount;}用字符指針表示字符串向函數(shù)傳遞字符串【例9.7】
編寫程序,從鍵盤輸入一行字符串,把字符串中每個(gè)字母e均變?yōu)镋,然后創(chuàng)建一個(gè)新串,并將每個(gè)單詞換行顯示出來。#include<stdio.h>#defineM100voidReadLine(charstr[]);char*Change(constchar*);intmain(){chars[M];printf("\nWhatisyour
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年土地使用權(quán)轉(zhuǎn)讓合同(含開發(fā)權(quán))
- 2024年廣西路分公司一級(jí)干線租用合同
- 2024年安全監(jiān)控外包服務(wù)合同
- 2024年工程設(shè)計(jì)變更合同補(bǔ)充
- 2024年度石油化工設(shè)備安裝調(diào)試合同
- 2024年工廠租賃合同書
- 2024年度塔吊設(shè)計(jì)研發(fā)合同
- 2024購(gòu)房合同應(yīng)注意事項(xiàng)
- 2024征地補(bǔ)償安置合同范本
- 2024年學(xué)校治安門衛(wèi)合同
- 塑料制品碳足跡核算通則
- 2022年高標(biāo)準(zhǔn)農(nóng)田建設(shè)項(xiàng)目施工組織設(shè)計(jì)
- 幼兒園施工組織設(shè)計(jì)施工方案
- 1.2數(shù)據(jù)的計(jì)算第一課時(shí)教案教科版高中信息技術(shù)必修1
- 內(nèi)分泌科常用藥物使用注意事項(xiàng)
- 海派旗袍(30年代旗袍)
- 2024年注冊(cè)消防工程師題庫(kù)(歷年真題)
- 直流電機(jī)的維護(hù)
- 挖掘機(jī)操作收藏手冊(cè)
- 教育家精神專題講座課件
- 第三單元 雪域天音 -熱巴舞曲 課件 2023-2024學(xué)年人音版初中音樂八年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論