C與數(shù)據(jù)結(jié)構(gòu)第11次課-字符串處理函數(shù)_第1頁
C與數(shù)據(jù)結(jié)構(gòu)第11次課-字符串處理函數(shù)_第2頁
C與數(shù)據(jù)結(jié)構(gòu)第11次課-字符串處理函數(shù)_第3頁
C與數(shù)據(jù)結(jié)構(gòu)第11次課-字符串處理函數(shù)_第4頁
C與數(shù)據(jù)結(jié)構(gòu)第11次課-字符串處理函數(shù)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

首頁學(xué)到現(xiàn)在,有什么體會(huì)?教學(xué)主題字符串處理函數(shù)教學(xué)目標(biāo)通過本次課的學(xué)習(xí),使學(xué)生掌握常用的字符串處理函數(shù)、求子串和串匹配算法。教學(xué)重點(diǎn)各種常用的字符串處理函數(shù)。教學(xué)難點(diǎn)

1、求子串的算法。

2、串的匹配算法。教案主要內(nèi)容

常用的字符串處理函數(shù)

求子串的運(yùn)算

串的匹配算法字符串處理函數(shù)C語言提供了豐富的字符串處理函數(shù),大致可分為字符串的輸入、輸出、合并、修改、比較、轉(zhuǎn)換、復(fù)制、搜索幾類。用于輸入輸出的字符串函數(shù),在使用前應(yīng)包含頭文件stdio.h。使用其它字符串函數(shù),則應(yīng)包含頭文件string.h。返回單個(gè)字符的輸入/出函數(shù)單個(gè)字符的輸出函數(shù)

putchar(字符變量或字符常量);例如:

putchar(‘A’);

②charch=‘\n’;

putchar(ch);

單個(gè)字符的輸入函數(shù)字符變量=getchar();例如:

charch;

ch=getchar();返回字符串輸出函數(shù)(puts)格式:

puts(字符數(shù)組名);功能:把字符數(shù)組中的字符串輸出到顯示器,即在屏幕上顯示該字符串。說明:

在輸出時(shí)將字符串的結(jié)束標(biāo)志‘\0’轉(zhuǎn)換成‘\n’,即輸出完字符串后換行。字符串輸出函數(shù)舉例源程序#include"stdio.h"voidmain(){charstr1[]="BASIC";charstr2[]="Program";puts(str1);puts(str2);}程序運(yùn)行結(jié)果BASICProgramprintf(“%s\n”,str1);為什么會(huì)換行?運(yùn)行程序(11_1)【問題1】寫出下面程序的運(yùn)行結(jié)果。字符串輸入函數(shù)(gets)格式:

gets(字符數(shù)組名);功能:從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)上輸入一個(gè)字符串(一行)到字符數(shù)組,并且得到一個(gè)函數(shù)值。該函數(shù)值是字符數(shù)組的起始地址。說明:①一次調(diào)用只能輸入一個(gè)字符串。②gets函數(shù)不以空格作為字符串輸入結(jié)束的標(biāo)志,而是以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。字符串輸入函數(shù)舉例#include"stdio.h"voidmain(){charst[15];

printf(“輸入一行字符:");

gets(st);

puts(st);}源程序【問題2】寫出下面程序的運(yùn)行情況。程序運(yùn)行情況①輸入thisisabook↙時(shí),輸出結(jié)果是什么?thisisabook輸出結(jié)果運(yùn)行程序(11_2)②把gets(st)改為scanf(“%s”,st),結(jié)果又如何?this輸出結(jié)果字符串連接函數(shù)(strcat)格式:

strcat(字符數(shù)組名1,字符數(shù)組名2);功能:把字符數(shù)組2中的字符串(連同尾部的’\0’)連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串結(jié)束標(biāo)志’\0’

。本函數(shù)返回值是字符數(shù)組1的首地址。說明:①字符數(shù)組1必須足夠大。字符串連接函數(shù)舉例#include"string.h"voidmain(){charst1[30]="Mynameis";charst2[10];

printf("請(qǐng)輸入姓名:\n");gets(st2);strcat(st1,st2);puts(st1);}源程序【問題3】寫出下面程序的運(yùn)行情況。程序運(yùn)行情況輸入Zhangyi↙時(shí),輸出結(jié)果是什么?MynameisZhangyi輸出結(jié)果運(yùn)行程序(11_3)字符串拷貝函數(shù)(strcpy)格式:

strcpy(字符數(shù)組名1,字符數(shù)組名2);功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標(biāo)志“\0”也一同拷貝。說明:①字符數(shù)組1必須寫成數(shù)組名形式,字符數(shù)組2可以是數(shù)組名形式也可以是字符串常量。

②不能用賦值語句將一個(gè)字符串常量或字符數(shù)組直接賦給一個(gè)字符數(shù)組。例如:charstr1[20],str2[]=“program”;

str1=“program”;str1=str2;錯(cuò)誤的用法字符串拷貝函數(shù)舉例源程序【問題4】寫出下面程序的運(yùn)行情況。程序運(yùn)行情況CLanguage輸出結(jié)果運(yùn)行程序(11_4)#include"string.h"voidmain(){charst1[15],st2[]="CLanguage";strcpy(st1,st2);puts(st1);}字符串比較函數(shù)(strcmp)格式:

strcmp(字符數(shù)組名1,字符數(shù)組名2)

功能:按照ASCII碼順序(即字典順序)比較兩個(gè)數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。

字符串1=字符串2,返回值=0;字符串1>字符串2,返回值>0;字符串1<字符串2,返回值<0。說明:①不能用比較運(yùn)算符直接比較兩個(gè)字符串。例如:charstr1[]=“progress”,str2[]=“program”;

if(str1!=str2)……錯(cuò)誤的用法字符串比較函數(shù)舉例源程序【問題5】寫出下面程序的運(yùn)行情況。程序運(yùn)行情況運(yùn)行程序(11_5)#include"string.h"voidmain(){intk;charst1[15],st2[]="CLanguage";

printf("請(qǐng)輸入一個(gè)字符串:\n");gets(st1);k=strcmp(st1,st2);if(k==0)printf("%s與%s相等。\n",st1,st2);if(k>0)printf("%s大于%s。\n",st1,st2);if(k<0)printf("%s小于%s。\n",st1,st2);}測字符串長度函數(shù)(strlen)格式:

strlen(字符數(shù)組名)

功能:測字符串的實(shí)際長度(不含字符串結(jié)束標(biāo)志‘\0’),并作為函數(shù)返回值。

測字符串長度函數(shù)舉例源程序【問題6】寫出下面程序的運(yùn)行情況。程序運(yùn)行情況運(yùn)行程序(11_6)#include"string.h"voidmain(){

intk;charst[]="CLanguage";k=strlen(st);

printf(“字符串(%s)的長度為%d。\n",st,k);}字符串(CLanguage)的長度為10。輸出結(jié)果大小寫字母轉(zhuǎn)換函數(shù)將大寫字母轉(zhuǎn)換成小寫字母函數(shù)(strlwr)格式:

strlwr(字符數(shù)組名)

功能:將字符串的大寫字母轉(zhuǎn)換成小寫字母。

將小寫字母轉(zhuǎn)換成大寫字母函數(shù)(strupr)格式:

strupr(字符數(shù)組名)

功能:將字符串的小寫字母轉(zhuǎn)換成大寫字母。

大小寫字母轉(zhuǎn)換函數(shù)舉例源程序【問題7】寫出下面程序的運(yùn)行情況。程序運(yùn)行情況運(yùn)行程序(11_7)轉(zhuǎn)換后的字符串為clanguage。再次轉(zhuǎn)換后的字符串為CLANGUAGE。輸出結(jié)果#include"string.h"voidmain(){charst[]="CLanguage";

strlwr(st);

printf("轉(zhuǎn)換后的字符串為%s。\n",st);

strupr(st);

printf("再次轉(zhuǎn)換后的字符串為%s。\n",st);}求子串的運(yùn)算在字符串的運(yùn)算中,有時(shí)需要從一個(gè)字符串中取出該串第i個(gè)字符開始、到第j個(gè)字符截止的連續(xù)子序列(其中0<i≤j≤串長),這就是取子串操作。求子串運(yùn)算的實(shí)現(xiàn)分析假設(shè)從字符串sor中取出任一子串,放入字符串des中。子串在主串sor中的起始位置為start,結(jié)束位置為end,則取子串操作就是將

sor[start-1],sor[start],…,sor[end-1]依次賦給

des[0],des[1],…,des[end-start]【問題8】實(shí)現(xiàn)求子串運(yùn)算。求子串運(yùn)算的實(shí)現(xiàn)流程圖運(yùn)行程序(11_8)看源程序(11_8)源程序返回串的匹配運(yùn)算假設(shè)t和p是兩個(gè)給定的串,在t中尋找與p相同的子串的過程稱為模式匹配。一般t稱為正文串(text),p稱為模式串(pattern),t的長度大于p的長度。字串t為t[n],字串p為p[m],其中n、m分別為字串t和p的長度。串匹配運(yùn)算的實(shí)現(xiàn)分析【問題9】實(shí)現(xiàn)串匹配運(yùn)算。實(shí)現(xiàn)模式匹配的簡單算法:對(duì)于i=0,1,…,n-m

,依次進(jìn)行下面的匹配步驟,最多進(jìn)行n-m+1次。匹配步驟如下:①設(shè)i=0。②用p[0],p[1]…,p[m-1]依次與t[i],t[i+1],…,t[i+m-1]進(jìn)行比較。③如果p[0]=t[i],p[1]=t[i+1],…,p[m-1]=t[i+m-1],那么匹配成功,返回模式串在正文串中的位置i,整個(gè)算法結(jié)束。④如果存在某個(gè)整數(shù)k(0≤k≤m-1),使得p[k]≠t[i+k],則立即中止后面的比較。⑤令i增加1。如果i等于n-m+1,則匹配失敗,整個(gè)算法結(jié)束;否則回到②進(jìn)行下一輪的匹配。串匹配運(yùn)算的實(shí)現(xiàn)子函數(shù)流程圖運(yùn)行程序(11_9)看源程序(11_9)源程序串匹配運(yùn)算的實(shí)現(xiàn)主函數(shù)流程圖源程序運(yùn)行程序(11_9)看源程序(11_9)串匹配函數(shù)(strstr)格式:

strstr(字符數(shù)組名1,字符數(shù)組名2)

功能:在字符數(shù)組1中尋找與字符數(shù)組2相同的子串。如找到,則返回尋找到的位置;如找不到,則將NULL作為函數(shù)返回值。

串匹配函數(shù)舉例源程序【問題10】寫出下面程序的運(yùn)行情況。運(yùn)行情況運(yùn)行程序(11_10)#include"string.h"voidmain(){chart[30],p[10];puts(“請(qǐng)輸入正文串:”);gets(t);puts(“請(qǐng)輸入模式串:”);gets(p);if(strstr(t,p)!=NULL)

printf(“

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論