一大二c課件第四章_第1頁(yè)
一大二c課件第四章_第2頁(yè)
一大二c課件第四章_第3頁(yè)
一大二c課件第四章_第4頁(yè)
一大二c課件第四章_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

4.3字符串

字符串常量:"ab123"ab123\0系統(tǒng)自動(dòng)添加

‘\0’(結(jié)束標(biāo)志符)處理字符串的方法有:

字符數(shù)組、CString(string)類和字符指針。4.3.1字符數(shù)組

1.字符數(shù)組如:chars[6];

chars1[2][6];字符數(shù)組若干個(gè)字符字符串a(chǎn)bcdabcd\0字符數(shù)組的初始化

(1)逐個(gè)字符賦初值(2)用字符串為字符數(shù)組初始化chars[10]={'I','','a','m',''.'f','i','n','e'};//s不是字符串chars[10]={"Iamfine"};chars[10]="Iamfine";s是字符串,‘\0’系統(tǒng)自動(dòng)添加(3)字符串?dāng)?shù)組初始化對(duì)二維數(shù)組以字符串形式初始化。chara[4][8]={"COBOL","FORTRAN","PASCAL","C/C++"};注意:對(duì)于二維字符數(shù)組,用兩個(gè)下標(biāo)表示數(shù)組中的一個(gè)字符。

注意不要出現(xiàn)下面的錯(cuò)誤:

chars[10]={“Thisisabook"};chars[10];s="Iamfine";chars[10];s={'I','','a','m',''.'f','i','n','e'};3.字符數(shù)組的輸入/輸出逐個(gè)數(shù)組元素的輸入/輸出

chars1[10];for(i=0;i<10;i++)//一定要輸入10個(gè)字符

cin>>s1[i];//s1中是字符,不是字符串,輸出也必須逐元素進(jìn)行注意:輸入時(shí)各輸入項(xiàng)之間不需加空格分隔

初始化做越界檢查,輸入不做

字符串整體的輸入/輸出

chars1[10],s2[2][5];輸入: 輸出:

cin>>s1; ?

cout<<s1;gets(s1); ?

puts(s1);for(inti=0;i<2;i++) ?

for(i=0;i<2;i++)gets(s2[i]); puts(s2[i]);s1、s2中是字符串,'\0'自動(dòng)添加注意:使用cin>>s1;語(yǔ)句,字符串中不能有空格。函數(shù)gets()和puts()是對(duì)字符串整體輸入/輸出,應(yīng)加#include“stdio.h”命令。

gets(字符數(shù)組名或字符指針變量名); puts(字符數(shù)組名或字符指針變量名); #include"stdio.h"#include"iostream.h"voidmain(){inti;charc[5]={'C','h','i','n','a'};charb[]="China"; for(i=0;i<5;i++) //不能用puts(c);也不能用cout<<c;cout<<c[i];puts(b); //或cout<<b;for(i=0;b[i]!='\0';i++)//正確的,但是壞的,不主張用這種方法

cout<<b[i];}【例4.8】字符串的輸入/輸出

4.字符串處理函數(shù)

使用下面函數(shù)時(shí),應(yīng)加#include“string.h”命令。1.strlen(str)

功能:求str所指向的字符串的長(zhǎng)度。不包括字符串結(jié)束標(biāo)志'\0'。說(shuō)明:str可為字符串常量、字符數(shù)組名或字符指針。2.strlwr(str)

功能:將字符串中的大寫字母轉(zhuǎn)換成小寫字母。說(shuō)明:str為字符串常量、數(shù)組名或字符指針。3.strupr(str)

功能:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。說(shuō)明:str為字符串常量、數(shù)組名或字符指針。4.strcpy(str1,str2)

功能:將str2所指的字符串復(fù)制到str1中。

說(shuō)明:str1和str2為字符數(shù)組名或字符指針,str2還可以是字符串常量。

str1要有足夠大的空間。設(shè):charstr2[10]={“aaa"},str1[10];strcpy(str1,str2);str1={“bb"};str1=str2;5.strcat(str1,str2)

功能:將str2字符串內(nèi)容連接到str1字符串內(nèi)容的后面說(shuō)明:str1要有足夠大的空間。例如:

chars1[20]="abcd";cout<<strcat(s1,“kkk")<<endl;//s1中的內(nèi)容變?yōu)閍bcdkkk6.strcmp(str1,str2)

功能:比較字符串str1和str2的大小。說(shuō)明:從左至右逐個(gè)字符進(jìn)行比較ASCII碼值,直到出現(xiàn)不相同字符或遇到'\0'為止。

str1小于str2 返回-1str1等于str2 返回0 str1大于str2 返回1strcmp(“ABCD”,”BD”);//結(jié)果為:-1#include"stdio.h"#include"string.h"voidmain(){chars[80];while(1){gets(s);if(strcmp(s,"pass"))puts("Invalidpassword.\n");elsebreak;}puts("pass\n");}【例4.9】字符串處理函數(shù)示例

4.4指針和數(shù)組4.4.1指針和一維數(shù)組設(shè)有定義:

inta[6]={10,20,30,40,50,60},*p=a;

下面介紹引用數(shù)組元素的三種方式。

1.下標(biāo)方式 形式:數(shù)組名[下標(biāo)]

2.地址方式

形式:*(地址)

3.指針方式

形式:

*指針變量名假設(shè)有定義floata[10],*p=a;則如下的等價(jià)關(guān)系成立:(1)p<=>a<=>&a[0](2)p+i<=>&a[i](3)*(p+i)<=>*(a+i)<=>a[i]

指針可以作數(shù)組名用即:p[i]<=>a[i]設(shè)有:

p=a;for(i=0;i<10;i++) cin>>a[i];則等價(jià)于:p=a;for(i=0;i<10;i++) cin>>*p++;p=a;for(i=0;i<10;i++,p++) cin>>*p;p=a;for(i=0;i<10;i++) cin>>*(p+i);思考:第三種方法與其它二種區(qū)別何在?分析下列程序:#include<iostream.h>voidmain(){inta[10],i,*p;p=a;for(i=0;i<10;i++)cin>>*p++;;for(i=0;i<10;i++,p++)cout<<*p;}思考:數(shù)組元素能否正確輸出?注意:

p與a的區(qū)別p是地址變量,而a是地址常量。②*p++與

(*p)++區(qū)別*p++的++運(yùn)算符作用于指針變量

(*p)++的++運(yùn)算符作用于指針變量所指對(duì)象設(shè)有定義:

inta[6]={10,20,30,40,50,60},*p=a+2;p++、p--、p=p+2a++、a=a+2cout<<*p++;//輸出30cout<<*p;//輸出40cout<<(*p)++;//輸出30

cout<<*p;//輸出314.4.3指針和字符串

可通過(guò)字符指針來(lái)訪問(wèn)字符數(shù)組,二者的區(qū)別:字符數(shù)組字符指針定義chars[6];char*p;初始化chars[]=“china”;char*p=“china”;char*p=s;賦值s[0]=’c’;s[1]=’h’;

//逐個(gè)賦值

cin>>s;gets(s);p=“china”;

//指向字符串常量的首地址

p=newchar[6];或p=s;//應(yīng)使字符指針有確定指向后才能從鍵盤進(jìn)行輸入操作

cin>>p;或gets(p);運(yùn)算字符數(shù)組名s不能進(jìn)行自增或自減運(yùn)算

p是指針變量,可以進(jìn)行自增或自減運(yùn)算

【例4.15】輸入一串字符存儲(chǔ)在字符數(shù)組中,用指針方式逐一顯示字符,并求其長(zhǎng)度。#include"iostream.h"#include"stdio.h"voidmain(){chars[80],*p;gets(s);p=s;//p指向數(shù)組的第一個(gè)元素

cout<<"輸出每個(gè)字符:";while(*p!='\0') cout<<*p++<<"";//指針下移,直到p指向字符串結(jié)束符

cout<<"\n字符串長(zhǎng)度:"<<p-s<<endl;

}4.5程序舉例插入數(shù)據(jù)基本思想:

1)首先要查找待插入數(shù)據(jù)在數(shù)組中的位置k;2)然后從最后一個(gè)元素開始往前直到下標(biāo)為k的元素依次往后移動(dòng)一個(gè)位置;3)第k個(gè)元素的位置空出,將欲插入的數(shù)據(jù)插入?!纠?.17】在有序數(shù)組a中插入數(shù)值xfor(k=0;k<9;k++)if(x<a[k])break;//找到插入的位置下標(biāo)為kfor(i=8;i>=k;i--)a[i+1]=a[i];//從最后元素開始往后移,騰出位置

a[k]=x; 2.刪除數(shù)據(jù)

刪除操作首先也是要找到欲刪除的元素的位置k;然后從k+1到n個(gè)位置開始向前移動(dòng);最后將數(shù)組元素減1。

【例4.18】從數(shù)組中刪除某數(shù)。for(i=0;i<10;i++)if(key==a[i])break;for(j=i;j<10;j++)a[j]=a[j+1];3.二分法查找分析:二分法查找只適合于在已排好序的數(shù)組中進(jìn)行。設(shè)a[low]和a[high]是有序數(shù)組中最小和最大元素,待查找的數(shù)為x。算法描述如下:①開始假設(shè)待查區(qū)間的下界low為0,上界high為N-1。②求待查區(qū)間中間元素的下標(biāo)mid=(low+high)/2,x和a[mid]比較。③若x==a[mid],則查找完畢,結(jié)束程序;若x>a[mid],則繼續(xù)查找的范圍應(yīng)為a[mid]后面的元素,修改查找區(qū)間的下界low=mid+1;若x<a[mid],則繼續(xù)查找的范圍應(yīng)為a[mid]前面的元素,修改查找區(qū)間的上界high=mid-1;④重復(fù)第2、3步,直到找到x;或low>high無(wú)查找區(qū)域,找不到。其中,第3步可用如下程序段實(shí)現(xiàn):請(qǐng)編出完整的程序。if(x==a[mid])break;elseif(x>a[mid])low=mid+1;elsehigh=mid-1;本章難點(diǎn):常見錯(cuò)誤:數(shù)組的指針表示法指向數(shù)組首元素的指針變量與數(shù)組名的本質(zhì)區(qū)別字符數(shù)組處理字符串的要點(diǎn)數(shù)值型數(shù)組與字符數(shù)組的處理區(qū)別引用超界元素用變量定義數(shù)組長(zhǎng)度未控制數(shù)值型數(shù)組的下標(biāo)變化用長(zhǎng)度控制字符數(shù)組的操作引用尚未取得值的元素本章算法小結(jié):1、排序(冒泡、選擇)皆需雙重循環(huán)。外循環(huán)控制遍歷次數(shù),內(nèi)循環(huán)控制某此遍歷過(guò)程中的起終點(diǎn)變化。選擇法:每次遍歷只交換一次元素,交換的為區(qū)間起點(diǎn)和區(qū)間內(nèi)的最小(或最大元素)for(i=0;i<N-1;i++){imin=i;for(j=i+1;j<N;j++)if(a[j]<a[imin])imin=j;t=a[i];a[i]=a[imim];a[imin]=t;}冒泡法:每次遍歷需若干次交換相鄰的元素for(j=0;j<N-1;j++)for(i=0;i<N-1-j;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}2、插

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論