![C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第5章 數(shù)組_第1頁(yè)](http://file4.renrendoc.com/view/a60ef0b2803e4667dced39378d54f012/a60ef0b2803e4667dced39378d54f0121.gif)
![C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第5章 數(shù)組_第2頁(yè)](http://file4.renrendoc.com/view/a60ef0b2803e4667dced39378d54f012/a60ef0b2803e4667dced39378d54f0122.gif)
![C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第5章 數(shù)組_第3頁(yè)](http://file4.renrendoc.com/view/a60ef0b2803e4667dced39378d54f012/a60ef0b2803e4667dced39378d54f0123.gif)
![C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第5章 數(shù)組_第4頁(yè)](http://file4.renrendoc.com/view/a60ef0b2803e4667dced39378d54f012/a60ef0b2803e4667dced39378d54f0124.gif)
![C++程序設(shè)計(jì)-杭州電子科技大學(xué) 第5章 數(shù)組_第5頁(yè)](http://file4.renrendoc.com/view/a60ef0b2803e4667dced39378d54f012/a60ef0b2803e4667dced39378d54f0125.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章數(shù)組5.1數(shù)組的概念5.2一維數(shù)組的定義和引用5.3二維數(shù)組的定義和引用5.4用數(shù)組名作函數(shù)參數(shù)5.5字符數(shù)組*5.6C++處理字符串的方法——字符串類與字符串變量數(shù)組是有序的相同類型變量的集合。組成數(shù)組的變量稱為該數(shù)組的元素。數(shù)組必須包含兩個(gè)要素:數(shù)組名和下標(biāo)。數(shù)組名和下標(biāo)惟一地標(biāo)識(shí)一個(gè)數(shù)組中的一個(gè)元素,如a[1]、a[2]等。一個(gè)數(shù)組在內(nèi)存中占一片連續(xù)的存儲(chǔ)單元。5.1數(shù)組的概念shortinta[10];假設(shè)數(shù)組的起始地址為2000,則該數(shù)組在內(nèi)存中的存儲(chǔ)情況如圖所示。數(shù)組名a為數(shù)組的起始地址:
cout<<a<<endl;輸出數(shù)組a的起始地址。C++用方括號(hào)來(lái)表示數(shù)組的下標(biāo),如用s[1],s[2],s[3]分別代表s數(shù)組第1、2、3個(gè)元素的值。
cout<<a+i<<endl;輸出數(shù)組第i個(gè)元素a[i]的地址。要輸出數(shù)組第i個(gè)元素的值,必須用a[i]:
cout<<a[i]<<endl;定義一維數(shù)組:
類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式];例如int
a[10];//名為a的整型數(shù)組,有10個(gè)元素。5.2一維數(shù)組的定義和引用
5.2.1定義一維數(shù)組數(shù)組元素的個(gè)數(shù),即數(shù)組長(zhǎng)度
inta[10]; 10表示a數(shù)組有10個(gè)元素,下標(biāo)從0開始,這10個(gè)元素分別是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。注意:最后一個(gè)元素是a[9],而不是a[10]。(2)常量表達(dá)式中可以包括常量、常變量和符號(hào)常量,但不能包含變量。C++不允許動(dòng)態(tài)定義數(shù)組的大小。intn;cin>>n;inta[n];constintn=5;
inta[n*2];inta[10];intb[2*5];下列數(shù)組定義是否正確:數(shù)組必須先定義,后使用。只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組中的全部元素。如:a={1,2,3}數(shù)組元素的表示形式:數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量/變量或整型表達(dá)式。
a[0]=a[5]+a[7]–a[2*3]5.2.2引用一維數(shù)組的元素例5.1將數(shù)組元素的值逆序輸出。#include<iostream>using
namespace
std;int
main(){
int
i,a[10];
for(i=0;i<=9;i++)
cin>>a[i];
for(i=9;i>=0;i--)
cout<<a[i]<<"";
cout<<endl;
return0;}輸入10個(gè)元素的值逆序輸入10個(gè)元素例5.2將數(shù)組元素的值前后倒置后,再輸出。#include<iostream>using
namespace
std;int
main(){
int
i,a[10],temp;
for(i=0;i<=9;i++)
cin>>a[i];
for(i=0;i<=4;i++) {
temp=a[i];
a[i]=a[9-i];
a[9-i]=temp; }
for(i=0;i<=9;i++)
cout<<a[i]<<"";
cout<<endl;
return0;}將數(shù)組元素前后倒置在定義數(shù)組時(shí)給數(shù)組元素全部賦予初值。例如:int
a[10]={0,1,2,3,4,5,6,7,8,9};(2)可以只給部分元素賦初值。例如
int
a[10]={0,1,2,3,4};5.2.3一維數(shù)組的初始化(3)如果想使一個(gè)數(shù)組中全部元素值為1,可以寫成
int
a[10]={1,1,1,1,1,1,1,1,1,1};不能寫成:int
a[10]={1*10};或int
a[10]=1;
不能用一個(gè)值給數(shù)組所有元素賦初值。(4)在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。例如
int
a[5]={0,1,2,3,4};可寫成:int
a[]={0,1,2,3,4};注意:若定義的數(shù)組長(zhǎng)度與初值個(gè)數(shù)不相符, 則不能省略數(shù)組長(zhǎng)度。有一對(duì)兔子從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子到第3個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,求第20個(gè)月的兔子對(duì)數(shù)。
5.2.4一維數(shù)組程序舉例f[1]=1(n=1)f[2]=1(n=2)f[n]=f[n-2]+f[n-1](n>=3)求Fibonacci數(shù)列問題#include<iostream>using
namespace
std;int
main(){
int
i;
int
f[21]={0,1,1};
for(i=3;i<=20;i++)
f[i]=f[i-1]+f[i-2];
cout<<f[20]<<endl;
return0;}用數(shù)組處理:不用數(shù)組處理:#include<iostream>using
namespace
std;int
main(){
int
i,num;
int
f1,f2;
f1=f2=1;
for(i=3;i<=20;i++) {
num=f1+f2;
f1=f2;
f2=num; }
cout<<num<<endl;
return0;}用遞歸處理:#include<iostream>using
namespace
std;int
main(){
int
fib(int
n);
cout<<fib(20)<<endl;
return0;}int
fib(int
n){
int
num;
if(n==1||n==2)num=1;
else
num=fib(n-1)+fib(n-2);
return
num;}#include<iostream>#include<iomanip>using
namespace
std;int
main(){
int
i,count;
int
f[20]={1,1};
cout<<setw(8)<<f[0]<<setw(8)<<f[1];
count=2;
for(i=2;i<20;i++) {
f[i]=f[i-1]+f[i-2];
cout<<setw(8)<<f[i];
count++;
if(count%5==0)cout<<endl; }
return0;}若要求輸出前20個(gè)月的兔子對(duì)數(shù)。有些數(shù)據(jù)要依賴于兩個(gè)因素才能惟一地確定,例如有3個(gè)學(xué)生,每個(gè)學(xué)生有4門課的成績(jī)??捎枚S數(shù)組表示:intstu_score[3][4];其中s[2][3]表示第3個(gè)學(xué)生第4門課的成績(jī)。5.3二維數(shù)組的定義和引用定義二維數(shù)組的一般形式:類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式][常量表達(dá)式]例如:floata[3][4];定義a為3×4(3行4列)的單精度數(shù)組,共12個(gè)元素。注意:
floata[3,4];5.3.1定義二維數(shù)組二維數(shù)組中元素存放的順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。例如:inta[3][4];數(shù)組存放的順序。該二維數(shù)組可以理解為定義了3個(gè)一維數(shù)組。a[0],a[1],a[2]作一維數(shù)組名。a[0][1]表示a[0]數(shù)組的第1個(gè)元素的值。a為二維數(shù)組的首地址;a[0],a[1],a[2]分別為第0、1、2行元素的首地址。 floata[2][3][4];
定義a為float型三維數(shù)組,有2×3×4=24個(gè)元素。多維數(shù)組元素存放順序:先變最后一維,再變前一維。a[0][0][0]a[0][0][1]a[0][0][2]a[0][0][3]a[0][1][0]a[0][1][1]a[0][1][2]a[0][1][3]a[0][2][0]a[0][2][1]a[0][2][2]a[0][2][3]a[1][0][0]a[1][0][1]a[1][0][2]a[1][0][3]a[1][1][0]a[1][1][1]a[1][1][2]a[1][1][3]a[1][2][0]a[1][2][1]a[1][2][2]a[1][2][3]二維數(shù)組元素的表示形式為:
數(shù)組名[下標(biāo)][下標(biāo)]如a[2][3]。下標(biāo)可以是整數(shù)表達(dá)式,如a[2][4-2]。注意:
a[2,3]5.3.2二維數(shù)組的引用使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值不要越界。
inta[3][4];//定義3行4列的數(shù)組 ┆ a[3][4]=15;//引用a[3][4]元素定義a為3×4的數(shù)組,它可用的行下標(biāo)值最大為2,列坐標(biāo)值最大為3。最多可以用到a[2][3],a[3][4]就超過了數(shù)組的范圍。分行給二維數(shù)組賦初值。如:int
a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};第1個(gè)花括號(hào)內(nèi)的數(shù)據(jù)賦給第0行的元素,第2個(gè)花括號(hào)內(nèi)的數(shù)據(jù)賦給第1行的元素……即按行賦初值。5.3.3二維數(shù)組的初始化(2)將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如:int
a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
用第2種方法如果數(shù)據(jù)多,寫成一大片,容易遺漏,也不易檢查。(3)對(duì)部分元素賦初值。如: int
a[3][4]={{1},{0,5},{0,0,9}};它的作用是只對(duì)各行第1列的元素賦初值,其余元素值自動(dòng)置為0。賦初值后數(shù)組各元素為:
1000 0500 0090
對(duì)非0元素少時(shí)比較方便對(duì)某幾行元素賦初值:
int
a[3][4]={{1},{5,6}};數(shù)組元素為: 1000 5600 0000若定義時(shí)只對(duì)部分元素賦初值而省略第一維的長(zhǎng)度,則必須分行賦初值。如:int
a[][4]={{1},{0,5},{0,0,9}};//數(shù)組共有3行。(4)如果對(duì)全部元素都賦初值,則定義數(shù)組時(shí)對(duì)第一維的長(zhǎng)度可以不指定,但第二維的長(zhǎng)度不能省。如inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};表示定義了3×4的數(shù)組a,行數(shù)=總個(gè)數(shù)/列數(shù)。int
a[3][]={1,2,3,4,5,6,7,8,9,10,11,12};5.3.4二維數(shù)組程序舉例例5.8有一個(gè)3×4的矩陣,要求編程序求出所有元素的最大值,以及其所在的行號(hào)和列號(hào)。要求用函數(shù)處理。思考:有一個(gè)3×4的矩陣,要求編程序求出每行元素的最大值,以及其所在的行號(hào)和列號(hào)。1.用數(shù)組元素作函數(shù)實(shí)參用數(shù)組元素作函數(shù)實(shí)參與用變量作實(shí)參一樣,將數(shù)組元素的值傳送給形參變量。形參是變量,而不是數(shù)組。5.4用數(shù)組名作函數(shù)參數(shù)intadd(int
x,int
y){
x=2*x;
y=2*y;
return
x+y;}intmain(){
int
a[2]={3,4};
intsum; sum=add(a[0],a[1]);
cout<<sum<<endl;
cout<<a[0]<<endl;
cout<<a[1]<<endl;
return0;}求程序運(yùn)行結(jié)果:2.用數(shù)組名作函數(shù)參數(shù)用數(shù)組名作函數(shù)參數(shù),此時(shí)實(shí)參與形參都用數(shù)組名。實(shí)參與形參的數(shù)組為同一個(gè)數(shù)組。例5.3編寫程序,用冒泡法對(duì)n(n<=100)個(gè)數(shù)排序(按由小到大順序)。冒泡法的思路是:將相鄰兩個(gè)數(shù)比較,將大的調(diào)到后面。第1次冒泡第2次冒泡void
bubble_sort(int
b[],intn){
int
i,j,temp;
bool
flags;
for(i=n-1;i>=1;i--) {flags=true;
for(j=0;j<i;j++) {
if(b[j]>b[j+1]) {
flags=false;
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp; } }
if(flags)break; }}flags的作用是提高冒泡法的速度。int
main(){
int
a[100],i,n;
cin>>n;
for(i=0;i<n;i++) {
cin>>a[i]; }
bubble_sort(a,n);
for(i=0;i<n;i++)
cout<<a[i]<<'';
cout<<endl;
return0;}說(shuō)明:(1)如果函數(shù)實(shí)參是數(shù)組名,形參也應(yīng)為數(shù)組名,形參不能聲明為普通變量(如intarray;)。實(shí)參數(shù)組與形參數(shù)組類型應(yīng)一致(如都為int型),如不一致,結(jié)果將出錯(cuò)。(2)數(shù)組名代表數(shù)組首元素的地址,并不代表數(shù)組中的全部元素。因此用數(shù)組名作函數(shù)實(shí)參時(shí),不是把實(shí)參數(shù)組的值傳遞給形參,而只是將實(shí)參數(shù)組首元素的地址傳遞給形參。形參可以是數(shù)組名,也可以是指針變量,它們用來(lái)接收實(shí)參傳來(lái)的地址。如果形參是數(shù)組名,它代表的是形參數(shù)組首元素的地址。在調(diào)用函數(shù)時(shí),將實(shí)參數(shù)組首元素的地址傳遞給形參數(shù)組名。這樣,實(shí)參數(shù)組和形參數(shù)組就共占同一段內(nèi)存單元。見圖5.6。 圖5.6函數(shù)首部的下面幾種寫法都合法,作用相同。voidselect_sort(intarray[10],intn)//指定元素個(gè)數(shù)與實(shí)參數(shù)組相同voidselect_sort(intarray[],intn)//不指定元素個(gè)數(shù)voidselect_sort(intarray[5],intn)//指定元素個(gè)數(shù)與實(shí)參數(shù)組不同3.用多維數(shù)組名作函數(shù)參數(shù)如果用二維數(shù)組名作為實(shí)參和形參,在對(duì)形參數(shù)組聲明時(shí),必須指定第二維(即列)的大小,且應(yīng)與實(shí)參的第二維的大小相同。第一維的大小可以指定,也可以不指定。如intarray[3][10];//形參數(shù)組的兩個(gè)維都指定intarray[][10];//第一維大小省略下面的形參數(shù)組寫法不合法:intarray[][];//不能確定數(shù)組的每一行有多少列元素intarray[3][];//不指定列數(shù)就無(wú)法確定數(shù)組的結(jié)構(gòu)在第二維大小相同的前提下,形參數(shù)組的第一維可以與實(shí)參數(shù)組不同。例如,實(shí)參數(shù)組定義為
intscore[5][10];
形參數(shù)組可以聲明為:intarray[3][10];
//列數(shù)與實(shí)參數(shù)組相同,行數(shù)不同intarray[8][10];實(shí)參數(shù)組名score代表其首元素(即第一行)的起始地址,系統(tǒng)不檢查第一維的大小。如果是三維或更多維的數(shù)組,系統(tǒng)不檢查第一維的大小,其它維的大小都要檢查。例5.8有一個(gè)3×4的矩陣,要求編程序求出所有元素的最大值,以及其所在的行號(hào)和列號(hào)。要求用函數(shù)處理。void
all_max(int
a[][4]){
int
i,j,i_max,j_max;
i_max=j_max=0;//先設(shè)第0行第0個(gè)元素為最大值
for(i=0;i<3;i++) {
for(j=1;j<4;j++) {
if(a[i][j]>a[i_max][j_max]) {
i_max=i;
j_max=j; } } }cout<<i_max<<''<<j_max<<''<<a[i_max][j_max]<<endl;}例、有一個(gè)3×4的矩陣,要求編程序求出每行元素的最大值,以及其所在的行號(hào)和列號(hào)。void
pre_max(int
a[][4]){
int
i,j,max_col;
for(i=0;i<3;i++){
max_col=0;//先設(shè)第i行第0個(gè)元素為最大值
for(j=1;j<4;j++) {
if(a[i][j]>a[i][max_col])max_col=j; }
cout<<i<<''<<max_col<<''<<a[i][max_col]<<endl;}}注意:形參定義時(shí)數(shù)組維數(shù)只能為定值,不能為變量。void
pre_max(int
a[][n]){ ……}存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組,字符數(shù)組中的一個(gè)元素存放一個(gè)字符。字符數(shù)組具有數(shù)組的共同屬性。字符數(shù)組又具有特殊的屬性。5.5字符數(shù)組一維字符數(shù)組定義:charc[10];一維字符數(shù)組初始化:
char
c[10]={'I','','a','m','','h','a','p','p','y'};上面定義了c為字符數(shù)組,包含10個(gè)元素。 圖5.75.5.1字符數(shù)組的定義和初始化二維字符數(shù)組定義:char
stu[5][10]; 包含有5*10個(gè)元素(5行10列)。二維字符數(shù)組初始化:char
stu[5][10]={{'J','o','h','n'},{'M','i','k','e'}};賦初值個(gè)數(shù)大于數(shù)組長(zhǎng)度,編譯出錯(cuò);賦初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,未賦初值元素的值自動(dòng)為空(‘\0’)。只能對(duì)字符數(shù)組的元素賦值,而不能用賦值語(yǔ)句對(duì)整個(gè)數(shù)組賦值。如:c={‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’};//不能對(duì)整個(gè)數(shù)組一次賦值c[0]='C';c[1]='h';c[2]='h';c[3]='h';c[4]='h';a和b為相同類型和長(zhǎng)度的數(shù)組,且b數(shù)組已被初始化:
5.5.2字符數(shù)組的賦值與引用a=b; //錯(cuò)誤,不能對(duì)整個(gè)數(shù)組整體賦值a[0]=b[0]; //正確,引用數(shù)組元素5.5.3字符串和字符串結(jié)束標(biāo)志回顧:對(duì)一個(gè)字符串常量,系統(tǒng)會(huì)自動(dòng)在所有字符的后面加一個(gè)‘\0’作為結(jié)束符。例如:"happy"有5個(gè)字符,但在內(nèi)存中共占6個(gè)字節(jié),最后一個(gè)字節(jié)‘\0’是由系統(tǒng)自動(dòng)加上的,表示字符串結(jié)束。char
str[7]={'h','a','p','p','y'};數(shù)組長(zhǎng)度(7),在存放上面5個(gè)字符之外,系統(tǒng)對(duì)字符數(shù)組最后兩元素自動(dòng)填補(bǔ)空字符'\0'。因此,用一個(gè)字符數(shù)組可以存放一個(gè)字符串中的字符。遇到字符'\0'就表示字符串到此結(jié)束,由它前面的字符組成字符串。例、在上面的數(shù)組中,第6個(gè)字符為'\0',就表明字符串的有效字符為其前面的5個(gè)字符。注意:在程序中依靠檢測(cè)'\0'的位置來(lái)判定字符串是否結(jié)束,不是根據(jù)數(shù)組長(zhǎng)度決定字符串長(zhǎng)度。定義字符數(shù)組時(shí)估計(jì)實(shí)際字符串長(zhǎng)度,保證數(shù)組長(zhǎng)度始終大于字符串實(shí)際長(zhǎng)度(至少大1個(gè))。若在一個(gè)字符數(shù)組中先后存放多個(gè)不同長(zhǎng)度的字符串,則應(yīng)使數(shù)組長(zhǎng)度大于最長(zhǎng)的字符串長(zhǎng)度。特殊性:對(duì)字符數(shù)組初始化的另一種方法:用字符串常量來(lái)初始化字符數(shù)組。例如 char
str[]={"happy"};花括號(hào)可省略:char
str[]="happy";注意:數(shù)組str的長(zhǎng)度不是5,而是6(因?yàn)樽址A康淖詈笥上到y(tǒng)加上一個(gè)‘\0’)。等價(jià)于:char
str[]={'h','a','p','p','y','\0'};不等價(jià)于:char
str[]={'h','a','p','p','y'};如果有: char
str[10]={“China"};數(shù)組str的前5個(gè)元素為‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’,第6個(gè)元素為空字符‘\0’,后4個(gè)元素為空字符'\0'。說(shuō)明:字符數(shù)組不要求它的最后一個(gè)字符為‘\0’: char
str[5]={'h','a','p','p','y'};是否需要加‘\0’,完全根據(jù)需要決定。為方便處理字符串,在字符數(shù)組中有效字符的后面也人為地加上一個(gè)‘\0’。如 char
str[6]={'h','a','p','p','y','\0'};字符數(shù)組的輸入輸出可以有兩種方法:逐個(gè)字符輸入輸出,與一般數(shù)組輸入相同。 c[i]=getchar()
cin>>c[i];5.5.4字符數(shù)組的輸入輸出輸入字符個(gè)數(shù)確定。有字符結(jié)束標(biāo)志。(2)將整個(gè)字符串一次輸入或輸出。char
str[20];cin>>str; //字符串輸入到空格或換行為止cout<<str; //輸出字符串到結(jié)束符‘\0’為止在運(yùn)行時(shí)輸入一個(gè)字符串:China↙在內(nèi)存中,在5個(gè)字符后自動(dòng)加了一個(gè)結(jié)束符‘\0’。字符數(shù)組名str代表字符數(shù)組的首地址,執(zhí)行“cout<<str;”的過程是從str所指向的數(shù)組第一個(gè)元素開始逐個(gè)輸出字符,直到遇到‘\0’為止。注意:(1)輸出的字符數(shù)組中一定要有結(jié)束符‘\0’。(2)輸出字符串時(shí),cout流中用字符數(shù)組名,而不是數(shù)組元素名。(3)如果數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到遇‘\0’結(jié)束。(4)如果一個(gè)字符數(shù)組中包含一個(gè)以上‘\0’,則遇第一個(gè)‘\0’時(shí)輸出就結(jié)束。(5)用cin從鍵盤輸入一個(gè)字符串時(shí),輸入的字符串應(yīng)短于已定義的字符數(shù)組的長(zhǎng)度,否則會(huì)出現(xiàn)問題。例:將輸入的一串字符簡(jiǎn)單譯碼后輸出。
譯碼規(guī)則:每個(gè)字符均譯成其后面的第4個(gè)字符。int
main(){
char
str[501];
cin>>str;
for(int
i=0;str[i]!='\0';i++)
str[i]=str[i]+4;
cout<<str<<endl;
return0;}例:將輸入的一串字符(包含空格,以換行結(jié)束)簡(jiǎn)單譯碼后輸出。intmain(){ charstr[101];
cin.getline(str,500,'\n');
intiLen;
iLen=strlen(str); for(inti=0;i<iLen;i++)
str[i]=str[i]+4;
cout<<str<<endl;; return0;}cin.getline(字符數(shù)組名,字符串最大長(zhǎng)度,字符串結(jié)束標(biāo)志)二維字符數(shù)組可以看成多個(gè)一維字符數(shù)組,每行存放一個(gè)字符串。二維字符數(shù)組的使用:int
main(){
char
str[5][10];
int
i;
for(i=0;i<5;i++)
cin>>str[i];
for(i=0;i<5;i++)
cout<<str[i]<<endl;
return0;}C和C++提供了一些字符串函數(shù),使得用戶能很方便地對(duì)字符串進(jìn)行處理。這些函數(shù),在string、string.h和iostream頭文件中都有定義。使用這些函數(shù)時(shí),使用其中之一便可。5.5.5字符串處理函數(shù)1.字符串連接函數(shù)strcat其函數(shù)原型為
strcat(char[],constchar[]);該函數(shù)有兩個(gè)字符數(shù)組的參數(shù),作用是:將第二個(gè)字符數(shù)組中的字符串連接到前面字符數(shù)組的字符串的后面。連接后的字符串放在第一個(gè)字符數(shù)組中,函數(shù)調(diào)用后得到的函數(shù)值,就是第一個(gè)字符數(shù)組的地址。例如:
char
str1[16]="Iama";
char
str2[]="student";
cout<<strcat(str1,str2)<<endl;
cout<<str1;Iama\0\0\0\0\0\0\0\0\0Iamastudent\0\0student\0str1str2str12.字符串復(fù)制函數(shù)strcpy其函數(shù)原型為
strcpy(char[],constchar[]);作用是將第二個(gè)字符數(shù)組中的字符串復(fù)制到第一個(gè)字符數(shù)組中去,將第一個(gè)字符數(shù)組中的相應(yīng)字符覆蓋,函數(shù)調(diào)用后得到的函數(shù)值,就是第一個(gè)字符數(shù)組的地址。例如char
str1[10],str2[]="China";cout<<strcpy(str1,str2);cout<<str1;執(zhí)行后,str2中的5個(gè)字符"China"和‘\0’(共6個(gè)字符)復(fù)制到數(shù)組str1中。str1=str2說(shuō)明:
strcpy(str1,"student");只能通過調(diào)用strcpy函數(shù)來(lái)實(shí)現(xiàn)將一個(gè)字符串或字符數(shù)組賦給另一個(gè)字符數(shù)組,而不能用賦值語(yǔ)句將一個(gè)字符串常量或字符數(shù)組直接賦給一個(gè)字符數(shù)組。charstr1[10];str1="student"3.字符串比較函數(shù)strcmp其函數(shù)原型為
strcmp(constchar[],constchar[]);作用是比較兩個(gè)字符串。以下寫法是合法的:strcmp(str1,str2);strcmp("China","Korea");strcmp(str1,"Beijing");比較的結(jié)果由函數(shù)值帶回。(1)如果字符串1=字符串2,函數(shù)返回值等于0。(2)如果字符串1>字符串2,函數(shù)返回值大于0。(3)如果字符串1<字符串2,函數(shù)返回值小于0。比較的規(guī)則:對(duì)兩個(gè)字符串自左至右逐個(gè)字符的ASCII碼相比,直到出現(xiàn)不同的字符或遇到‘\0’為止。如全部字符相同,則認(rèn)為相等;若出現(xiàn)不相同的字符,則以第一個(gè)不相同的字符的比較結(jié)果為準(zhǔn)。strcmp(“abc”,“abd”);//返回值<0strcmp(“abc”,“ab”); //返回值>0strcmp(“abc”,“abc”);//返回值=0注意:對(duì)兩個(gè)字符串比較,不能用以下形式:if(str1>str2)cout<<“yes”;If(“abc”>“ab”)cout<<“yes”;應(yīng)寫成:if(strcmp(str1,str2)>0)cout<<“yes”;4.字符串長(zhǎng)度函數(shù)strlen函數(shù)原型為:
strlen(constchar[]);函數(shù)返回值為字符串的實(shí)際長(zhǎng)度,不包括‘\0’在內(nèi)。如: charstr[10]=“China”;
cout<<strlen(str);輸出結(jié)果不是10,也不是6,而是5。例5.10輸入n個(gè)單詞,用選擇法從小到大排序后輸出。要求用函數(shù)調(diào)用(設(shè)n<=20,字符長(zhǎng)度最大不超過10)。5.5.6字符數(shù)組應(yīng)用舉例intmain(){ charstr[20][11];
intn,i; voidinput_data(charstr[][11],intn); voidselect_sort(charstr[][11],intn);
cin>>n; input_data(str,n); select_sort(str,n); for(i=0;i<n;i++)
cout<<str[i]<<endl; return0;}voidinput_data(charstr[][11],intn){ for(inti=0;i<n;i++)
cin>>str[i];}voidselect_sort(charstr[][11],intn){ chartemp[11];
inti,j,iMin; for(i=0;i<n-1;i++) {
iMin=i; for(j=i+1;j<n;j++) if(strcmp(str[j],str[iMin])<0)iMin=j;
strcpy(temp,str[iMin]);
strcpy(str[iMin],str[i]);
strcpy(str[i],temp); }}C++提供了一種新的數(shù)據(jù)類型——字符串類型(string類型)。string不是C++的基本類型,它是在C++標(biāo)準(zhǔn)庫(kù)中聲明的一個(gè)字符串類。使用string類型時(shí),必須有#include<string>。*5.6C++處理字符串的方法——字符串類與字符串變量1.定義字符串變量用類名string定義字符串變量。如string
string1;//定義string1為字符串變量string
string2=“China”;//定義string2同時(shí)初始化5.6.1字符串變量的定義和引用定義和使用與標(biāo)準(zhǔn)數(shù)據(jù)類型相同。2.對(duì)字符串變量的賦值可用賦值語(yǔ)句對(duì)它賦予一個(gè)字符串常量,如 string2=“China”;用一個(gè)字符串變量給另一個(gè)字符串變量賦值,如: string2=string1;
//string2和string1為字符串變量在定義字符串變量時(shí)不需指定長(zhǎng)度,長(zhǎng)度隨其中的字符串長(zhǎng)度而改變。對(duì)字符串變量中某一字符進(jìn)行操作,如:string
word="Then";word[2]=‘a(chǎn)’;word
變量中的值為:“Than”3.字符串變量的輸入輸出可以在輸入輸出語(yǔ)句中用字符串變量名,輸入輸出字符串,如
cin>>string1;
cout<<string2;#include<iostream>#include<string>using
namespace
std;int
main(){
string
string1;
cin>>string1;
for(int
i=0;i<string1.length();i++) {
string1[i]=string1[i]+4; }
cout<<string1<<endl;;
return0;}例:將輸入的一串字符簡(jiǎn)單譯碼后輸出。
譯碼規(guī)則:每個(gè)字符均譯成其后面的第4個(gè)字符。(用字符串變量實(shí)現(xiàn))在以字符數(shù)組存放字符串時(shí),字符串的運(yùn)算要用字符串函數(shù),如strcat(連接)、strcmp(比較)、strcpy(復(fù)制),而對(duì)string類對(duì)象,可以不用這些函數(shù),而直接用簡(jiǎn)單的運(yùn)算符。(1)字符串復(fù)制用賦值號(hào)
string1=string2;其作用與“str
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳前臺(tái)服務(wù)總結(jié)
- 酷咖食品科技產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 10月石家莊房地產(chǎn)市場(chǎng)調(diào)研總結(jié)報(bào)告
- 2025-2030全球環(huán)錠細(xì)紗機(jī)單錠檢測(cè)系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)有機(jī)天然肥料行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)風(fēng)冷單螺桿式冷水機(jī)組行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)航空航天設(shè)備零部件用超聲波清洗機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)網(wǎng)紅孵化服務(wù)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球電池護(hù)照(DDP)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)冷加工噴丸機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 蘇教版四年級(jí)數(shù)學(xué)下冊(cè)第三單元第二課時(shí)《常見的數(shù)量關(guān)系》課件
- 浙江省臺(tái)州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評(píng)估政治試題 含解析
- 寧夏“8·19”較大爆燃事故調(diào)查報(bào)告
- 中國(guó)高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024年全國(guó)高考新課標(biāo)卷物理真題(含答案)
- 勞動(dòng)合同薪酬與績(jī)效約定書
- 消除醫(yī)療歧視管理制度
- 足療店?duì)I銷策劃方案
- 學(xué)校安全一崗雙責(zé)
評(píng)論
0/150
提交評(píng)論