c语言放空一个数组,C++语言
8種機(jī)械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
本章學(xué)習(xí)字符相關(guān)內(nèi)容。
讓我們從介紹字符型(char)開始。
字符型,顧名思義,就是可以保存字符的數(shù)據(jù)類型,與int、double等保存數(shù)字的略有區(qū)別。什么區(qū)別呢?表示上的區(qū)別
比如我們要表示數(shù)字1,則int a=1;即可。
而若要表示字符1,則需要char a='1';
注意到字符1被單引號所圍住。這就是表示字符的方法。
若寫char a=1;則會令a被賦值為一個與字符1毫無關(guān)系的符號。
使用上的區(qū)別
首先聲明三個概念:數(shù)字、數(shù)值、字符。
毋庸置疑的是,在計(jì)算機(jī)內(nèi)部,不論是數(shù)字還是字符,都是轉(zhuǎn)化為數(shù)值進(jìn)行處理的。
顯然,數(shù)字1的數(shù)值也是1,以此類推。
但是字符1的數(shù)值就不是1了,而是49。
為什么呢?可以查詢一下ASCII碼,此處不多解釋。
常見的字符與其數(shù)值:
‘0’=48,’1’=49,以此類推
‘A’=65,’B’=66,以此類推
‘a(chǎn)’=97,’b’=98,以此類推
但有時候我們還會經(jīng)??吹健痭’,’ ’之類的。這些是什么呢?這些叫轉(zhuǎn)義字符。其中,’ ’表示空字符,’n’表示換行符。
*printf(“n”);與cout<
數(shù)值匹配如下:
‘ ’=0
‘n’=10
查看數(shù)值匹配的方法:cout<
printf(“%d”,’0’);也可以實(shí)現(xiàn)1的效果
cout<
printf(“%c”,48);也可以
以上,就是字符型的簡單表示。
接下來是字符數(shù)組。
字符數(shù)組
在前幾章中,我們已經(jīng)學(xué)習(xí)了數(shù)組的相關(guān)知識。那么很顯然,字符數(shù)組的聲明應(yīng)該滿足下述格式:
char str[100];
本語句聲明了一個名為str的char類型數(shù)組,有100個單位可供使用。
我們知道,對于數(shù)組,其內(nèi)部存儲的時候是一個個值連續(xù)存儲的。那么對于字符數(shù)組,因?yàn)樽址偷闹凳亲址?#xff0c;所以字符數(shù)組內(nèi)部就是一個個字符連續(xù)存儲的。如將“helloworld”保存在上述字符數(shù)組str內(nèi),則內(nèi)部表示為’h’,’e’,’l’,’l’,’o’,’w’,’o’,’r’,’l’,’d’,如同一連串的字符,此時便可稱之為字符串。
對于字符數(shù)組的初始化,除了前述的對于數(shù)組的通用初始化方法,還可以使用雙引號,也就是用字符串常量直接初始化。如:采用通用方法:char str[100]={'h','e','l','l','o','w','o','r','l','d'};
采用雙引號:char str[100]="helloworld";
注意到采用通用方法時,需要大括號,而采用字符串常量時不需要大括號。
上面我們?yōu)閟tr數(shù)組開設(shè)了100個單位,并且注意到”helloworld”只有10個字符。那么我們可不可以只開10個單位呢?問題可以轉(zhuǎn)化成,以下兩種寫法可不可行?采用通用方法:char str[10]={'h','e','l','l','o','w','o','r','l','d'};
采用雙引號:char str[10]="helloworld";
答案是,兩種都不可行。
在第一種中,雖然我們顯式指定了str數(shù)組各個位上的值,但編譯時其會在結(jié)尾補(bǔ)一個空字符’ ’,導(dǎo)致其最終有11個元素,超出了str數(shù)組10個元素的限制,引起訪問錯誤。所以,在使用通用方法進(jìn)行對字符數(shù)組的初始化時,應(yīng)該預(yù)留足夠的位置,至少應(yīng)該是顯示指定的字符數(shù)+1。
在第二種中,我們直接使用字符串常量來對字符數(shù)組進(jìn)行初始化,依然會有第一種的問題,所以仍然需要多留一位。但要注意的是,第一種引發(fā)的是運(yùn)行時的紊亂,而第二種引發(fā)的是編譯錯誤,相比第一種更加容易發(fā)現(xiàn)。
特殊的,可以采用這樣的寫法來對字符數(shù)組進(jìn)行初始化:char str[]="helloworld";
這樣的寫法可以不指定數(shù)組的長度,其內(nèi)部會自動適配長度。但僅僅在對字符數(shù)組使用字符串常量進(jìn)行初始化時可以不指定數(shù)組長度,其它類型/寫法均不可以。
*僅在定義的時候可以用字符串常量對其進(jìn)行賦值,在之后便不再可行,會引發(fā)編譯錯誤。后續(xù)要操作的話只能按普通數(shù)組的方法。
對于二維數(shù)組,可以采用下述方法進(jìn)行初始化:
char a[][10]={"hello","hi"};
第一維可以放空,若填寫則不得少于字符串?dāng)?shù)量。
第二維必填,不得少于最長的字符串長度+1。
一般不需要使用更多維的char數(shù)組。
在cstring頭文檔中,提供了下列函數(shù)來對字符數(shù)組進(jìn)行操作。
基本假設(shè):設(shè)有char a[20]="hello",b[20]="hi";strcpy(目標(biāo),來源);
此函數(shù)為復(fù)制函數(shù),能將來源的字符串復(fù)制給目標(biāo)。
示例:strcpy(a,b);
運(yùn)行后a數(shù)組和b數(shù)組都將等于”hi”。
strcat(目標(biāo),來源);
此函數(shù)為拼接函數(shù),能將來源的字符串拼接到目標(biāo)字符串后面。
示例:strcat(a,b);
運(yùn)行后a數(shù)組將等于”hellohi”,b數(shù)組不變。
strlen(數(shù)組名稱);
此函數(shù)可以求出字符串長度(直到’ ’)。
示例:strlen(a);
求出來的值是”hello”的長度5。因?yàn)閍數(shù)組內(nèi)部有賦值的部分是’h’,’e’,’l’,’l’,’o’,’ ’,strlen會從下標(biāo)0開始往后計(jì)算直到第一個’ ’之前。
*若令a[2]=' ',則a數(shù)組內(nèi)部有賦值的部分變?yōu)椤痟’,’e’,’ ’,’l’,’o’,’ ’,將導(dǎo)致strlen所求得的值變?yōu)?。
*若令a[0]=' ',則a數(shù)組內(nèi)部有賦值的部分變?yōu)椤?’,’e’,’l’,’l’,’o’,’ ’,將導(dǎo)致strlen所求得的值變?yōu)?。
strcmp(數(shù)組1名稱,數(shù)組2名稱);
此函數(shù)可以按字典序比較數(shù)組1中的字符串1與數(shù)組2中的字符串2的大小。若字符串1大則返回正數(shù),小則返回負(fù)數(shù),一樣大則返回0。
*字典序的比較方法:
設(shè)有char a[]="13",b[]="120";
字典序是逐位比較的。先比較下標(biāo)0的位置,發(fā)現(xiàn)字符串1和2的該位置都是’1’,則繼續(xù)比較下標(biāo)1的位置,發(fā)現(xiàn)字符串1的該位置是’3’而字符串2的該位置是’2’,因?yàn)椤?’>’2’,所以字符串1比字符串2大。
再設(shè)有char a[]="12",b[]="120";
先比較下標(biāo)0的位置,發(fā)現(xiàn)字符串1和2的該位置都是’1’,則繼續(xù)比較下標(biāo)1的位置,發(fā)現(xiàn)字符串1和2的該位置都是’2’,則繼續(xù)比較下標(biāo)2的位置,發(fā)現(xiàn)字符串1的該位置是’ ’而字符串2的該位置是’0’,因?yàn)椤?’
以上就是對于字符數(shù)組的相關(guān)描述。對字符串的了解有沒有清晰一些呢?現(xiàn)在開始介紹string類型,也即字符串類型。
字符串類型
使用string類型需要包含string頭文檔。
上面說到,一個一維字符數(shù)組可以表示一個字符串。那么對于string類型,該如何表示一個字符串呢?答案是一個變量即可。string在有string頭文檔的情況下可以如int等類型一般使用。
示例:string str="helloworld";
對于string類型,無需指定字符串長度,其內(nèi)部會自動適配。且string類型可以在任意時候更改其賦值。如,可以在上述已有定義的情況下,令str=”hi”,則str會變成字符串”hi”。
盡管我們上述聲明的str僅僅是一個變量,不是數(shù)組,但因?yàn)樗莝tring類型,所以我們也可以使用下標(biāo)來訪問它內(nèi)部的字符。如在string str=”helloworld”的基礎(chǔ)上,我們可以訪問str[4]得到其第五個字符’o’,也可以令str[4]=’r’使得str變?yōu)椤県ellrworld”。
同樣的,對于string類型,我們也可以使用數(shù)組。如string str[2]={"hi","helloworld"};可以通過str[i]來訪問在str數(shù)組中下標(biāo)為i的字符串,也可以通過str[i][j]來訪問在str數(shù)組中下標(biāo)為i的字符串的下標(biāo)為j的位置。更多維數(shù)組同理。
在string頭文檔中,提供了下列成員函數(shù)來對string類型變量進(jìn)行操作。
基本假設(shè):設(shè)有string a="hello",b="hi";
(以下基于與上文中適用于字符數(shù)組的函數(shù)的對比)a=b;
可以直接令a的值等于b的值,使用賦值符號即可。
a=a+b;
可以直接令字符串a(chǎn)和字符串b拼接在一起產(chǎn)生一個新的字符串,然后再把這個新的字符串賦值給a。
length();
可以求得字符串a(chǎn)的長度(求值方法與strlen一致)。
直接使用運(yùn)算符進(jìn)行比較。比較方法仍然是根據(jù)字典序(詳見上文)。
以上,我們可以顯而易見地發(fā)現(xiàn),使用string類型比使用char數(shù)組更為方便。故實(shí)際使用時,若無特殊要求,一般建議使用string類型。
第五章到此結(jié)束。
總結(jié)
以上是生活随笔為你收集整理的c语言放空一个数组,C++语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言返回一个数的任意倍数,几道基础C语
- 下一篇: char类型的实参与const char