版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Chap
5字符數(shù)組5.1一維字符數(shù)組5.2字符串5.3字符串相關(guān)函數(shù)的應(yīng)用本章要點(diǎn)什么是字符串?字符串結(jié)束符的作用是什么?如何實(shí)現(xiàn)字符串的存儲(chǔ)和操作,包括字符串的輸入和輸出?怎樣理解C語(yǔ)言將字符串作為一個(gè)特殊的一維字符數(shù)組?5.1一維字符數(shù)組字符串的存儲(chǔ)和運(yùn)算可以用一維字符數(shù)組實(shí)現(xiàn)一維字符數(shù)組的定義、引用、初始化與其他類型的一維數(shù)組一樣。charstr[80];
定義一個(gè)含有80個(gè)字符型元素的數(shù)組strchart[5]={'H','a','p','p','y'};初始化數(shù)組t
t[0]t[1]t[4]t
Happy輸出數(shù)組t的所有元素for(i=0;i<5;i++)putchar(t[i]);一維字符數(shù)組chart[5]={'H','a','p','p','y'};chars[6]={'H','a','p','p','y',0};0代表字符'\0',也就是ASCII碼為0的字符
chars[6]={'H','a','p','p','y','\0'};
s[0]s[1]s[5]s
Happy\0
t[0]t[1]t[4]t
Happy5.2字符串字符串常量用一對(duì)雙引號(hào)括起來(lái)的字符序列一個(gè)字符串結(jié)束符'\0'"Happy"6個(gè)字符'H''a’'p’'p’'y''\0'有效字符字符串結(jié)束符字符串的有效長(zhǎng)度:有效字符的個(gè)數(shù)字符串與一維字符數(shù)組字符串:一個(gè)特殊的一維字符數(shù)組把字符串放入一維字符數(shù)組(存儲(chǔ))對(duì)字符串的操作===>對(duì)字符數(shù)組的操作1.字符串的存儲(chǔ)-數(shù)組初始化字符串可以存放在一維字符數(shù)組中
chars[6]={'H','a','p','p','y','\0'};字符數(shù)組初始化:用字符串常量chars[6]={"Happy"};chars[6]="Happy";chars2[10]="Happy";數(shù)組長(zhǎng)度>=字符串的有效長(zhǎng)度+1chart[5];"Happy"能存入t嗎?
s[0]s[1]s[5]s
Happy\0字符串的存儲(chǔ)autochars[80]="Happy";字符串遇'\0'結(jié)束第一個(gè)'\0'前面的所有字符和'\0'
一起構(gòu)成了字符串"Happy”'\0'
之后的其他數(shù)組元素與該字符串無(wú)關(guān)
s[0]s[1]s[5]s
Happy\0
?
?字符串由有效字符和字符串結(jié)束符
'\0'組成
2.對(duì)字符串的操作把字符串放入一維字符數(shù)組(存儲(chǔ))對(duì)字符串的操作===>對(duì)字符數(shù)組的操作普通字符數(shù)組:數(shù)組元素的個(gè)數(shù)是確定的,一般用下標(biāo)控制循環(huán)字符串:沒(méi)有顯式地給出有效字符的個(gè)數(shù),只規(guī)定在字符串結(jié)束符
'\0'
之前的字符都是字符串的有效字符,一般用結(jié)束符
'\0'來(lái)控制循環(huán)循環(huán)條件:s[i]!='\0'計(jì)算字符串的有效長(zhǎng)度,并輸出該字符串。字符串的有效長(zhǎng)度:有效字符的個(gè)數(shù)數(shù)組中第一個(gè)'\0'前面的字符個(gè)數(shù)例:計(jì)算字符串的有效長(zhǎng)度
s[0]s[1]s[5]s
Happy
\0?
?#include<stdio.h>intmain(void){inti=0,len;charstr[80]="Happy";/*初始化*/for(i=0;str[i]!='\0';i++);
len=i;printf("len=%d\n",len);
for(i=0;str[i]!='\0';i++)/*輸出字符串*/putchar(str[i]);return0;}例:源程序
s[0]s[1]s[5]s
Happy\0
??循環(huán)條件len=5Happyfor(i=0;s[i]!='\0';i++)putchar(s[i]);for(i=0;i<80;i++)putchar(s[i]);for(i=0;i<len;i++)putchar(s[i]);輸出字符串
s[0]s[1]s[5]s
Happy\0
??3.字符串的存儲(chǔ)-賦值和輸入把字符串放入一維字符數(shù)組(存儲(chǔ))對(duì)字符串的操作===>對(duì)字符數(shù)組的操作存儲(chǔ)數(shù)組初始化chars[6]="Hello";賦值s[0]='a';s[1]='\0';或者chars[6]="a";"a"2個(gè)字符'a'和'\0''a'1個(gè)字符常量區(qū)分"a"和'a'字符串的輸入字符串的存儲(chǔ)字符數(shù)組初始化:chars[6]="Happy";賦值:s[0]='a';s[1]='\0';輸入'\0'代表空操作,無(wú)法輸入輸入時(shí),設(shè)定一個(gè)輸入結(jié)束符將輸入結(jié)束符轉(zhuǎn)換為字符串結(jié)束符'\0'輸入一個(gè)以回車結(jié)束的字符串(少于80個(gè)字符),統(tǒng)計(jì)其中數(shù)字字符的個(gè)數(shù)。分析:數(shù)組長(zhǎng)度取上限80以'\n'做為輸入結(jié)束符例1:統(tǒng)計(jì)字符#include<stdio.h>intmain(void){intcount,i;charstr[80];
printf(“Enterastring:");i=0;while((str[i]=getchar())!='\n')i++;
str[i]='\0';/*輸入結(jié)束符=>字符串結(jié)束符*/count=0;for(i=0;str[i]!='\0';i++)if(str[i]<='9'&&str[i]>='0')count++;printf("count=%d\n",count);return0;}例:源程序字符串的輸入Enterastring:It's512?count=3如何改變輸入結(jié)束符?能省略str[i]='\0'嗎?012345678sIt's512
\0
??例2:進(jìn)制轉(zhuǎn)換
#include<stdio.h>intmain(void){inti,n;chars[10];
printf(“Enterastring:");
/*輸入字符串*/i=0;while((s[i]=getchar())!='\n')i++;s[i]='\0';
n=0;/*將字符串轉(zhuǎn)換為整數(shù)*/for(i=0;s[i]!='\0';i++)if(s[i]<='9'&&s[i]>='0')
n=n*10+(s[i]-'0');else
break;printf("digit=%d\n",n);return0;}Enterastring:
123digit=1230123
s123\0
??進(jìn)制轉(zhuǎn)換方法
n=0;for(i=0;s[i]!='\0';i++)if(s[i]<='9'&&s[i]>='0')
n=n*10+(s[i]-'0');else
break;0123
s123\0
??is[i]s[i]-'0'n=n*10+(s[i]-'0')0'1'10*10+1=11'2'21*10+2=122'3'312*10+3=1233'\0'Enterastring:
1#2#3digit=字符串小結(jié)字符串:一個(gè)特殊的一維字符數(shù)組'\0'把字符串放入一維字符數(shù)組(存儲(chǔ))數(shù)組長(zhǎng)度足夠字符數(shù)組初始化:chars[80]="Happy";賦值:s[0]='a';s[1]='\0';輸入:輸入結(jié)束符==>字符串結(jié)束符'\0'
i=0;while((s[i]=getchar())!='\n')i++;s[i]='\0';
s[0]s[1]s[5]sHappy\0
??把字符串放入一維字符數(shù)組(存儲(chǔ))對(duì)字符串的操作===>對(duì)字符數(shù)組的操作只針對(duì)字符串的有效字符和字符串結(jié)束符'\0'
檢測(cè)for(i=0;s[i]!='\0';i++)putchar(s[i]);
s[0]s[1]s[5]sHappy\0
??5.3常用的字符串處理函數(shù)函數(shù)原型在stdio.h或string.h中給出1、字符串的輸入和輸出輸入字符串:scanf()或gets()輸出字符串:printf()或puts()
stdio.hcharstr[80];i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';(1)scanf("%s",str)輸入?yún)?shù):字符數(shù)組名,不加地址符遇回車或空格輸入結(jié)束,并自動(dòng)將輸入的一串字符和‘\0’送入數(shù)組中(2)gets(str)遇回車輸入結(jié)束,自動(dòng)將輸入的一串字符和‘\0’送入數(shù)組中
字符串的輸入'\n''''\t'charstr[80];for(i=0;str[i]!=‘\0’;i++)putchar(str[i]);(3)printf("%s",str)printf("%s","hello");(4)puts(str)puts("hello");輸出字符串后自動(dòng)換行輸出參數(shù)可以是字符數(shù)組名或字符串常量,輸出遇'\0'結(jié)束字符串的輸出#include<stdio.h>intmain(){charstr[80];scanf("%s",str);printf("%s",str);printf("%s","Hello");return0;}例:字符串輸入輸出函數(shù)示例#include<stdio.h>intmain(){charstr[80];gets(str);puts(str);puts("Hello");return0;}ProgrammingProgrammingHelloProgrammingisfun!
ProgrammingHelloProgrammingProgrammingHelloProgrammingisfun!
Programmingisfun!Hello2、字符串的復(fù)制、連接、比較、
求字符串長(zhǎng)度字符串復(fù)制:strcpy(str1,str2)字符串連接:strcat(str1,str2)字符串比較:strcmp(str1,str2)求字符串長(zhǎng)度:strlen(str)string.hstrcpy(str1,str2);將字符串str2復(fù)制到str1中
staticcharstr1[20];staticcharstr2[20]=“happy”;字符串復(fù)制函數(shù)strcpy()happy\0\0strcpy(str1,str2);happy\0str1中strcpy(str1,“world”);str1中:world\0#include“stdio.h”#include“string.h”intmain(void){charstr1[20],str2[20];gets(str2);strcpy(str1,str2);puts(str1);return0;}strcpy()示例12341234
strcat(str1,str2);
連接兩個(gè)字符串str1和str2,并將結(jié)果放入str1中字符串連接函數(shù)strcat#include"stdio.h"#include"string.h"intmain(void){charstr1[80],str2[20];gets(str1);gets(str2);strcat(str1,str2);puts(str1);return0;}str1中:
Letus\0str2中:go.\0str1中:
Letusgo.\0str2中:go.\0Letusgo.
Letusgo.strcmp(str1,str2)比較兩個(gè)字符串str1和str2的大小。規(guī)則:按字典序(ASCII碼序)如果str1和str2相等,返回0;如果str1大于str2,返回一個(gè)正整數(shù);如果str1小于str2,返回一個(gè)負(fù)整數(shù);staticchars1[20]="sea";
字符串比較函數(shù)strcmpstrcmp(s1,"Sea");strcmp("Sea","Sea");strcmp("Sea","Sea");正整數(shù)負(fù)整數(shù)0#include“stdio.h”#include“string.h”intmain(void){intres;chars1[20],s2[20];gets(s1);gets(s2);res=strcmp(s1,s2);printf(“%d”,res);return0;}strcmp()示例12345-4利用字符串比較函數(shù)比較字符串的大小
strcmp(str1,str2);為什么定義這樣的函數(shù)?用strcmp()比較字符串strcmp(str1,str2)>0strcmp(str1,“hello”)<0strcmp(str1,str2)==0str1>str2str1<“hello”str1==str2
比較字符串首元素的地址比較字符串的內(nèi)容strlen(str)計(jì)算字符串的有效長(zhǎng)度,不包括‘\0’。staticcharstr[20]=“Howareyou?”strlen(“hello”)的值是:strlen(str)的值是:字符串長(zhǎng)度函數(shù)strlen512函數(shù)功能頭文件puts(str)輸出字符串stdio.hgets(str)輸入字符串(回車間隔)strcpy(s1,s2)s2==>s1strcat(s1,s2)s1“+”s2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 事業(yè)單位c類考試試題及答案
- 山東消防競(jìng)賽試題及答案
- 企業(yè)經(jīng)濟(jì)統(tǒng)計(jì)試題及答案
- 湖北省黃石市2025年元月初中畢業(yè)科目調(diào)研考試地理試卷(含答案)
- 能源專業(yè)介紹
- 2026年大學(xué)大二(康復(fù)治療學(xué))康復(fù)應(yīng)用綜合測(cè)試試題及答案
- 2026年大學(xué)大二(機(jī)械設(shè)計(jì)制造及其自動(dòng)化)機(jī)械創(chuàng)新設(shè)計(jì)綜合測(cè)試題及答案
- 幼兒游戲觀察題庫(kù)及答案
- 2026年人教版物理九年級(jí)上冊(cè)期中質(zhì)量檢測(cè)卷(附答案解析)
- 2026年魯教版生物八年級(jí)上冊(cè)期中質(zhì)量檢測(cè)卷(附答案解析)
- 2026年建筑物智能化與電氣節(jié)能技術(shù)發(fā)展
- 半導(dǎo)體產(chǎn)業(yè)人才供需洞察報(bào)告 202511-獵聘
- 電梯救援安全培訓(xùn)課件
- 2025年青島市國(guó)企社會(huì)招聘筆試及答案
- 2026屆江西省撫州市臨川區(qū)第一中學(xué)高二上數(shù)學(xué)期末考試模擬試題含解析
- 民航華東地區(qū)管理局機(jī)關(guān)服務(wù)中心2025年公開(kāi)招聘工作人員考試題庫(kù)必考題
- 云南省大理州2024-2025學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含解析)
- 物業(yè)管理法律法規(guī)與實(shí)務(wù)操作
- 高壓避雷器課件
- 體檢中心收費(fèi)與財(cái)務(wù)一體化管理方案
- 四川省內(nèi)江市2024-2025學(xué)年高二上學(xué)期期末檢測(cè)化學(xué)試題
評(píng)論
0/150
提交評(píng)論