第六講C語言字符與字符串_第1頁
第六講C語言字符與字符串_第2頁
第六講C語言字符與字符串_第3頁
第六講C語言字符與字符串_第4頁
第六講C語言字符與字符串_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、前導程序#include#include#define DENSITY 62.4int main(void)float weight,volume;int size,letters;char name40;printf(Hi!Whats your first name?n);scanf(%s,name);printf(%s,Whats your weight in pounds?n,name);scanf(%f,&weight);size=sizeof name;letters=strlen(name);volume=weight/DENSITY;printf(Well,%s,your

2、 volume is %2.2f cubic feet.n,name,volume);printf(Also,your first name has %d letters.n,letters);printf(And we have %d bytes to store it in.n,size);return 0;程序說明它使用一個數(shù)組(array)來存放一個字符串。這里,某人的名字被讀進這個數(shù)組中。該數(shù)組是內(nèi)存中一串連續(xù)的40個字節(jié),其中每個字節(jié)都是可以存放一個字符值。它使用%s轉(zhuǎn)換說明符來處理字符串的輸入和輸出。請注意,在scanf()中,weight使用了&前綴,而name沒有(因

3、為數(shù)組名name就是該數(shù)組的地址)。它使用C函數(shù)strlen()來獲取字符串的長度。一、字符串簡介一、字符串簡介字符串(character string)就是一個或多個字符的序列。例如:Hi!Whats your first name?“雙引號不是字符串的一部分,他們只是通知編譯器其中包含了一個字符串,正如單引號標識著一個字符一樣。1.char數(shù)組和空字符C沒有為字符串定義專門的變量類型,而是把它存儲在char類型的數(shù)組中。字符串中的字符存放在相鄰的存儲單元中,每個字符占用一個單元;而數(shù)組由相鄰存儲單元組成,所以把字符串存儲到數(shù)組中是很自然的,如下圖所示。H i!W h a tsy o u r

4、firs tn a m e ? 0請注意,圖中數(shù)組的最后一個位置顯示字符0。這個字符就是空字符,大多數(shù)時候計算機可以為我們自動添加這個0。C用它來標記字符串的結(jié)束??兆址皇菙?shù)字0,它是非打印字符,其ASCII碼的值為0。C的字符串存儲通常以這個空字符結(jié)束。該字符的存在意味著數(shù)組的單元數(shù)必須至少比要存儲的字符數(shù)多1。一、字符串簡介一、字符串簡介2.使用字符串 #includeint main(void)char praise30=What a super marvelous name!,name20;printf(Whats your name?n);scanf(%s,name);printf

5、(Hello! %s, %s,name,praise);return 0;%s告訴printf()要打印一個字符串。%s出現(xiàn)兩次是因為該程序要打印兩個字符串:一個被存儲在name數(shù)組中,另一個存儲在praise數(shù)組中。你無須親自把空字符插入name數(shù)組中。scanf()在讀取輸入時會自動完成這項任務(wù),同樣,也無需在字符串praise中包含一個空字符,編譯器負責完成這一事情。請注意,scanf()只讀取了Michael Jordan的名字Michael。scanf()開始讀取輸入以后,會在遇到第一個空白字符(空格blank、制表符tab或者換行符newline)處停止讀取。因此,它在遇到Mich

6、ael Jordan之間的空格時,就停止了掃描。一般情況下,使用%s的scanf()只會把一個單詞而不是把整個句子作為字符串讀入。C使用其它讀取輸入函數(shù)(例如gets())來處理一般的字符串。一、字符串簡介一、字符串簡介3.字符串和字符 字符串常量“x“與字符常量x不同。一個區(qū)別是x屬于基本類型(char),而“x“則屬于派生類型(char數(shù)組)。第二個區(qū)別是“x“實際上由兩個字符( x 和0 )組成,如下圖所示。x0 xx是一個字符“x“是一個字符串一、字符串簡介一、字符串簡介4.strlen()函數(shù)#include#include#define PRAISE What a super ma

7、rvelous name!int main(void)char name40;printf(Whats your name?n);scanf(%s,name);printf(Hello! %s, %sn,name,PRAISE);printf(Your name of %d letters occupies %d memory cells.n,strlen(name),sizeof name);printf(The phrase of PRAISE has %d letters,strlen(PRAISE);printf( and occupies %d memory cells.n,size

8、of PRAISE);return 0;首先,請注意,程序中使用了兩種方法來處理很長的printf()語句。第一個方法是讓一個printf()語句占用兩行(可以在參數(shù)之間斷開一行)。第二個方法使用兩個printf()語句來輸出一行,換行符(n)只出現(xiàn)在第二個語句中。一、字符串簡介一、字符串簡介4.strlen()函數(shù)根據(jù)sizeof運算符的報告,數(shù)組name數(shù)組有40個內(nèi)存單元。不過只用了其中前7個單元來存放Michael,這是strlen()所報告的。數(shù)組name的第8個單元中放置空字符,它的存在告訴strlen()在哪里停止計數(shù),如下圖所示。M ic h a e l07個字符通常是垃圾數(shù)據(jù)

9、起終止作用的空字符對于PRAISE,strlen()再一次給出了字符串中字符(包括空格和標點符號)的準確數(shù)目。sizeof運算符提供的數(shù)目比前者大1,這是因為它把用來標志字符串結(jié)束的不可兼得空字符也計算在內(nèi)。我們并沒有告訴計算機為存儲該語句分配多大內(nèi)存,它必須自己計算出雙引號之間的字符的數(shù)目。二、字符串輸入二、字符串輸入1.gets()函數(shù)gets()(代表get string)函數(shù)對于交互式程序非常方便。它從系統(tǒng)的標準輸入設(shè)備(通常是鍵盤)獲得一個字符串。因為字符串沒有預定的長度,所以gets()需要知道輸入何時結(jié)束。解決辦法是讀字符串直到遇到一個換行字符(n),按回車鍵可以產(chǎn)生這個字符。它

10、讀取換行符之前(不包括換行符)的所有字符,在這些字符后添加一個空字符(0),然后把這個字符串交給調(diào)用它的程序。它將讀取換行符并將其丟棄,這樣下一次讀取就會在新的一行開始。下面給出了一個使用get()的簡單實例。#include#define MAX 81int main(void)char nameMAX;printf(Hi!Whats your name?n);gets(name);printf(Nice name, %s,name);return 0;二、字符串輸入二、字符串輸入2.scanf()函數(shù)scanf()和get()主要的區(qū)別在于它們?nèi)绾螞Q定字符串何時結(jié)束。scanf()基于獲取

11、單詞而不是獲取字符串,而gets()函數(shù)會讀取所有的字符,直到遇到一個換行符為止。scanf()使用兩種方法決定輸入結(jié)束。無論哪種方法,字符串都是以遇到第一個非空白字符開始。如果使用%s格式,字符串讀到(但不包括)下一個空白字符(例如空格、制表符或換行符)。如果指定了字段寬度,比如%10s,scanf()就會讀入10個字符或直到遇到第一個空白字符,有兩者中最先滿足的那一個終止輸入,下面例子說明了指定字段寬度時scanf()的工作情況。#includeint main(void)char name111,name211;int count;printf(Please enter 2 names.

12、n);count=scanf(%5s%10s,name1,name2);printf(I read the %d names %s and %s.n,count,name1,name2);return 0;scanf()函數(shù)返回一個整數(shù)值,這個值是成功讀取的項目數(shù)。三、字符串輸出三、字符串輸出1.puts()函數(shù)puts()函數(shù)的使用很簡單,只需要給出一個一個字符串參數(shù)的地址地址。注意,每一個字符串都單行顯示。與printf()不同,puts()顯示字符串時自動在其后添加一個換行符。還有一點需要說明的就是,對于字符串常量而言,整個引號中的內(nèi)容就是指向給字符串存儲位置的指針,即地址。這一點與把數(shù)組名作為指向數(shù)組存儲位置的指針類似。#include#define MAX 81int main(void)char nameMAX;puts(Hi!Whats your name?);gets(name);puts(Nice name!);puts(name);return 0;三、字符串輸出三、字符串輸出2.printf()函數(shù)如同puts()函數(shù)一樣,printf()需要一個字符串地址作為參數(shù)。Printf()函數(shù)使用起來沒有puts()那么方便,但是它可以格式化多種數(shù)據(jù)類型,因而更通用。它們的區(qū)別之一就是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論