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