版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第九章字符串目錄/Contents字符串常量字符串的輸入輸出字符串處理函數(shù)字符數(shù)組和字符指針向函數(shù)傳遞字符串從函數(shù)返回一個字符串指針問題的提出用雙引號括起的一串字符是字符串常量,C語言自動為其添加′\0′結束符"Howareyou"Ilovechina\0一串以‘\0’結尾的字符在C語言中被看做字符串字符串的存儲是字符數(shù)組,但不代表字符串數(shù)組的最后一個元素必須是'\0'◆C語言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理◆字符數(shù)組每個元素都是字符類型的數(shù)組
charstr[80];字符串初始化◆用字符型數(shù)據(jù)對數(shù)組進行初始化charstr[7]={‘H',‘e',‘l',‘l',‘o',‘!’,'\0'};◆用字符串常量直接對數(shù)組初始化charstr[]={“Hello!"};charstr[]=“Hello!";◆多個字符串常量直接對二維數(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ù)組存儲字符串,再讓字符指針指向該字符數(shù)組字符串的輸入/輸出(逐個字符輸入)inti=0;while((str[i++]=getchar())!=‘\n’);str[i]=‘\0’;按字符逐個輸入charstr[10];字符串的輸入/輸出(逐個字符輸出)按字符逐個輸入/輸出for(i=0;str[i]!='\0';i++){ putchar(str[i]);}putchar('\n');charstr[10];一般不用字符串長度控制字符串的輸入/輸出(逐個字符輸入/輸出)【例9.1】
按%c格式控制符,從鍵盤輸入一個字符串,并將它顯示出來。#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ù)的分隔符,因而不能被讀入,輸入遇到這些字符時,系統(tǒng)認為字符串輸入結束【例9.2】
按%s格式控制符,從鍵盤輸入一個字符串,并將它顯示出來。#include<stdio.h>#defineN20intmain(){ charname[N]; printf("Enteryourname:"); scanf("%s",name); printf("Hello%s",name); return0;}字符串的輸入/輸出Why?字符串的輸入/輸出【例9.3】
使用gets()從鍵盤輸入一個帶空格的字符串,然后使用puts()把它顯示出來。#include<stdio.h>#defineN20intmain(){ charstring[N];char*ptr=string; printf("Enterastring:"); gets(ptr); printf(“Hello%s!\n”,ptr); return0;}不限制輸入字符串的長度易引起緩沖區(qū)溢出,給黑客攻擊以可乘之機【例9.3】
使用gets()從鍵盤輸入一個帶空格的字符串,然后使用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如果用戶輸入的字符個數(shù)超過了數(shù)組的長度,導致程序出錯或異常終止更安全的方法是用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(目的字符串,源字符串);字符串復制strlen(字符串);字符串長度strcat(目的字符串,源字符串);字符串連接strcmp(字符串1,字符串2);字符串比較字符串處理函數(shù)◆#include<string.h>strlen(字符串);字符串長度charstr[10]={"China"};printf("%d",
strlen(str));打印結果是5、6,還是10?China\0\0\0\0\0不包括\0的實際字符的個數(shù)字符串處理函數(shù)◆#include<string.h>strlen(字符串);字符串長度len=
strlen(str);for(i=0;i<len;i++){ putchar(str[i]);}putchar('\n');用長度控制字符串輸出字符串處理函數(shù)◆#include<string.h>strcpy(目的字符串,源字符串);字符串復制字符串能否用=整體復制?str2=str1;strcpy(str2,str1);注意復制的方向!str2必須足夠大!想想這個函數(shù)是如何實現(xiàn)字符串復制的?◆#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);字符串比較字符串是如何比較大小的?當出現(xiàn)第一對不相等的字符時,就由這兩個字符決定所在字符串的大小,返回其ASCII碼比較的結果值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個人名*/ } SortName(name,n); printf("Aftersortedresults:\n"); for(i=0;i<n;i++) { puts(name[i]); } return0;}【例9.5】
從鍵盤輸入不超過20人的名字字符串,用函數(shù)編寫這些字符串的排序程序并測試之。運行結果:(屏幕顯示)Inputthenumberofpersons:3Inputtheirnames:JohnWhitePeterAftersortedresults:JohnPeterWhite字符串處理函數(shù)應用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)/*字符串比較,不能使用關系運算符*/ { strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp); } } }}字符串處理函數(shù)應用向函數(shù)傳遞字符串◆向函數(shù)傳遞字符串時,既可使用字符數(shù)組作函數(shù)參數(shù),也可使用字符指針作函數(shù)參數(shù)◆地址傳遞向函數(shù)傳遞字符串【例9.6】
編寫一個記錄字符串中單詞個數(shù)的函數(shù),并測試之。#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】
編寫程序,從鍵盤輸入一行字符串,把字符串中每個字母e均變?yōu)镋,然后創(chuàng)建一個新串,并將每個單詞換行顯示出來。#include<stdio.h>#defineM100voidReadLine(charstr[]);char*Change(constchar*);intmain(){chars[M];printf("\nWhatisyour
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬音樂會的電子票務系統(tǒng)設計與實現(xiàn)-洞察分析
- 原子操作在并發(fā)編程中的應用-洞察分析
- 虛擬化網絡設備研究-洞察分析
- 營養(yǎng)不良與生長發(fā)育障礙-洞察分析
- 預研階段風險控制-洞察分析
- 香菇多糖藥物開發(fā)前景-洞察分析
- 順鉑抗腫瘤機制探討-洞察分析
- 元數(shù)據(jù)自動生成-洞察分析
- 雄黃礦床資源評價-洞察分析
- 音樂平臺社區(qū)與用戶粘性-洞察分析
- 國家開放大學電大本科《國際私法》2024-2025期末試題及答案(試卷號:1020)
- 《微觀經濟學》(雙語)試卷B及答案
- 脅痛中醫(yī)臨床路徑
- 16種(卡特爾)人格測評試題及答案
- 蛋雞養(yǎng)殖場管理制度管理辦法
- 螺內酯在腎臟病中的應用演示教學
- 市政工程計量與計價講義
- 小孩出生后視力發(fā)展過程
- X62W萬能銑床
- 供應商年度審核計劃及現(xiàn)場審核表
- 環(huán)甲膜穿刺ppt課件
評論
0/150
提交評論