字符串和字符串指針變量2版_第1頁(yè)
字符串和字符串指針變量2版_第2頁(yè)
字符串和字符串指針變量2版_第3頁(yè)
字符串和字符串指針變量2版_第4頁(yè)
字符串和字符串指針變量2版_第5頁(yè)
已閱讀5頁(yè),還剩37頁(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)介

1.字符型數(shù)據(jù)C程序設(shè)計(jì)語(yǔ)言采用了ASCII標(biāo)準(zhǔn)字符集來(lái)提供對(duì)字符數(shù)據(jù)的支持。ASCII字符集提供了127個(gè)字符的編碼。組成如下:字母:大寫英文字母A~Z,小寫字母a~z數(shù)字:0~9專門符號(hào):29個(gè),包括:!“等等空格符:空格、水平制表符(tab)、垂直制表符號(hào)等等轉(zhuǎn)義字符:‘\n’(回車換行)‘\b’(退格)等等ASCII編碼(書本附錄P377) 在計(jì)算內(nèi)部實(shí)際上是將字符以整數(shù)形式存放在內(nèi)存單元中的。這個(gè)整數(shù)實(shí)際上就是字符的ASCII編碼 例如:大寫字母’A’的ASCII編碼是65,‘Z’的編碼是90小寫字母’a’的ASCII編碼是97,’z’的編碼是122數(shù)字字符’0’的ASCII編碼是49,‘9’的編碼是57空格字符’‘的ASCII編碼是32

注意:

(1)C語(yǔ)言中字符常量是由1個(gè)字符構(gòu)成的數(shù)據(jù).

(2)在程序中,字符常量必須用單引起括起來(lái),所以’1’和1是兩個(gè)完全不同的對(duì)象。前者是字符,后者是一個(gè)數(shù)字.字符變量 字符變量是用類型符char定義的變量。一個(gè)字符變量只能存儲(chǔ)一個(gè)ASCII字符。

例如:charc;

正確的代碼:c=‘?’;

錯(cuò)誤的代碼: c=‘?!’; c=“abc”;

2.字符串常量 由多個(gè)字符組成的數(shù)據(jù)稱為字符串常量(以后簡(jiǎn)稱字符串),字符串常量的兩邊必須用雙引號(hào)包含起來(lái)。

例如:“thisisastring.”或“china”在C程序設(shè)計(jì)語(yǔ)言中,字符串常量使用數(shù)組保存。區(qū)別字符字符串形式用單引號(hào)括起來(lái)用雙引號(hào)括起來(lái)數(shù)量1個(gè)字符大于等于一個(gè)字符字符串在內(nèi)存中的存儲(chǔ)方式是,按順序存儲(chǔ)每個(gè)字符的ASCII編碼值,如下圖所示。每個(gè)字符串的末尾都附有一個(gè)特殊字符\0,稱為字符串結(jié)束標(biāo)志。C語(yǔ)言中沒(méi)有字符串變量,因此要保存字符串常量的話需要借助字符數(shù)組.6.3字符數(shù)組 P154字符數(shù)組使用char關(guān)鍵字進(jìn)行定義,一般形式如下:char數(shù)組名[數(shù)組長(zhǎng)度];例如:

定義字符數(shù)組c,并將字符逐一保存到字符數(shù)組中. charc[20]={‘I’,’

’,’a’,’m’,’

’,’h’,’a’,’p’,’p’,’y’,’\0’};

C[0]C[1]C[2]C[3]C[4]C[5]C[6]C[7]C[8]C[9]C[10]C[11]…‘I’‘’‘a(chǎn)’‘m’‘’‘h’‘a(chǎn)’‘p’‘p’‘y’‘\0’‘\0’…注意:余下的數(shù)組元素用空字符’\0’填充字符串和字符串結(jié)束標(biāo)志’\0’可以直接使用字符串常量來(lái)賦值字符數(shù)組,例如: charc[20]={“Iamhappy”};或簡(jiǎn)寫成charc[20]=“Iamhappy”;

和上一個(gè)例子相同,字符串中的字符是逐個(gè)存放到數(shù)組元素中的。唯一的區(qū)別是,C系統(tǒng)在用字符數(shù)組存儲(chǔ)字符串常量時(shí)會(huì)自動(dòng)在末尾加一個(gè)’\0’作為字符串結(jié)束標(biāo)志。所以上面的程序?qū)嶋H上是存儲(chǔ)了11個(gè)字符數(shù)據(jù)到數(shù)組c中。C[0]C[1]C[2]C[3]C[4]C[5]C[6]C[7]C[8]C[9]C[10]C[11]…‘I’‘’‘a(chǎn)’‘m’‘’‘h’‘a(chǎn)’‘p’‘p’‘y’‘\0’……字符數(shù)組的輸出方法 P159(一)逐個(gè)字符輸出

使用printf語(yǔ)句和%c格式符#include<stdio.h>main(){charc[15]={'I','','a','m','','a','','s','t','u','d','e','n','t','.'};chard[11]=“Iamhappy”;inti;for(i=0;i<15;i++) printf("%c",c[i]);printf("\n");for(i=0;i<10;i++) printf("%c",d[i]);}(二)將整個(gè)字符串一次輸出,使用printf和%s格式符例C6-6-2.C#include<stdio.h>main(){charc[11]="Iamhappy";printf("%s",c);getch();}用%s格式符輸出字符串時(shí),printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名說(shuō)明:輸出的字符不包括結(jié)束符’\0’如果數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,輸出到’\0’結(jié)束例如:charc[10]=“China”;只輸出有效的字符5個(gè)如果字符數(shù)組中包含一個(gè)以上’\0’,則遇第一個(gè)’\0’時(shí)輸出就結(jié)束。例如 charc[]={“helloBob”}; c[5]=‘\0’; printf(“%s”,c);/*屏幕上輸出hello*/

c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]hello空格Bob‘\0’字符數(shù)組的輸入 可以用scanf函數(shù)輸入一個(gè)字符串。

例如: charc[20]; scanf(”%s”,c); 注意:scanf函數(shù)中的輸入項(xiàng)c是已定義的字符數(shù)組名,數(shù)組名前面不要加&,因?yàn)镃語(yǔ)言中數(shù)組名代表該數(shù)組的地址。6.3.6字符串處理函數(shù)puts()函數(shù) 作用:是將一個(gè)字符串(以’\0’結(jié)束的字符序列)輸出到屏幕。使用方式為:puts(字符數(shù)組名);例如: charstr[]={“china\nBeijing”};puts(str);gets()函數(shù) 作用:作用是從終端輸入一個(gè)字符串到字符數(shù)組。使用方式為:gets(字符數(shù)組名);例如: charstr[200];gets(str);二維字符數(shù)組若需要存放多個(gè)字符串,則可以使用二維字符數(shù)組定義二維字符數(shù)組的語(yǔ)法格式char數(shù)組名[整型常量][整型常量];例如:chararr[3][10];例題6.15二維字符數(shù)組單個(gè)元素引用#include<stdio.h>voidmain(){charweek[7][10]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};inti,j;for(i=0;i<7;i++){for(j=0;j<10;j++)printf("%c",week[i][j]);printf("\n");}}操作字符串的函數(shù)下面介紹字符串處理函數(shù),使用這些有特殊功能的函數(shù)時(shí),ANSIC標(biāo)準(zhǔn)要求必須包含頭文件”string.h”,即程序的開(kāi)頭要有#include“string.h”strcat函數(shù)用于連接兩個(gè)字符數(shù)組中的字符串。即把字符串2接到字符串1的后,并將結(jié)果保存在字符數(shù)組1。strcat(字符數(shù)組1,字符數(shù)組2)例:s1[0]s1[1]s1[2]s1[3]s1[4]s1[5]s1[6]s1[7]s1[8]s1[9]very\0s2[0]s2[1]s2[2]s2[3]s2[4]good\0strcpy函數(shù)strcpy是字符串復(fù)制函數(shù)。作用是將字符串2復(fù)制到字符數(shù)組1中去。其一般形式為:strcpy(字符數(shù)組1,字符串2)

例s1[0]s1[1]s1[2]s1[3]s1[4]s1[5]s1[6]s1[7]s1[8]s1[9]history\0s2[0]s2[1]s2[2]s2[3]s2[4]s2[5]China\0China\0關(guān)于strcpy函數(shù)的幾點(diǎn)說(shuō)明字符數(shù)組1必須定義得足夠大。字符數(shù)組1必須寫成數(shù)組名形式,字符串2可以是字符數(shù)組名,也可以是一個(gè)字符串常量。 如:strcpy(str1,”China”);復(fù)制時(shí)連同字符串后面的’\0’一起復(fù)制到字符數(shù)組1不能用賦值語(yǔ)句將一個(gè)字符串常量或字符數(shù)組直接給一個(gè)字符數(shù)組。如:str1=″China″;不合法str1=str2;不合法strcmp函數(shù)

其一般形式為:strcmp(字符串1,字符串2)

strcmp的作用是比較字符串1和字符串2。比較的結(jié)果由函數(shù)值帶回如果字符串1=字符串2,函數(shù)值為0。如果字符串1>字符串2,函數(shù)值為一正整數(shù)。如果字符串1<字符串2,函數(shù)值為一負(fù)整數(shù)例如:E5.C比較規(guī)則:按字母的ASCII碼比較注意:對(duì)兩個(gè)字符串比較,不能用str1>str2strlen函數(shù)strlen是測(cè)試字符串長(zhǎng)度的函數(shù)。函數(shù)的值為字符串中的實(shí)際長(zhǎng)度(不包括’\0’)。其一般形式為:strlen(字符數(shù)組)例如:

charstr[10]={“China”}; printf(“%d“,strlen(str));輸出結(jié)果不是10,也不是6,而是5。strlwr函數(shù)和strupr函數(shù)

strlwr函數(shù)的作用是將字符串中大寫字母換成小寫字母。其一般形式為:strlwr(字符串)strupr函數(shù)的作用是將字符串中小寫字母換成大寫字母。其一般形式為:strupr(字符串)6.3.3指向字符串的指針變量可以定義一個(gè)指向字符的指針變量來(lái)指向存放字符串的首地址,這種指針變量就稱為指向字符串的指針變量。 例如:char*ptr=“Thisisastring”;

說(shuō)明:系統(tǒng)分配一塊長(zhǎng)度為字符串字符個(gè)數(shù)加上1的連續(xù)內(nèi)存空間用于存放該字符串,然后將連續(xù)內(nèi)存空間的首地址賦給字符指針ptr.例6.17#include"stdio.h"voidmain(){char*string;string="Thisisastring.";printf("%s\n",string);string+=8;while(*string){putchar(string[0]);string++;}}Thisisastring.\0內(nèi)存指向字符數(shù)組的指針變量 可以定義一個(gè)字符指針指向一字符數(shù)組。例6.18#include"stdio.h"main(){charstr[]="Thisisastring.";char*string;string=str;printf("%s\n",str);printf("%s\n",string);string+=8;printf("%s\n",string);getch();}字符串應(yīng)用舉例例題1:統(tǒng)計(jì)用戶從鍵盤上輸入字符串中字符的個(gè)數(shù)。#include<stdio.h>voidmain(){charc[100];inti,sum=0;gets(c);for(i=0;c[i]!='\0';i++)sum++;printf("theinputfontnumber=%d",sum);}循環(huán)終止條件c[i]!=‘\0’當(dāng)遇到存儲(chǔ)字符串結(jié)束符的數(shù)組元素時(shí),則循環(huán)停止。tjzf1.c方法1:使用gets函數(shù)完整讀取輸入的內(nèi)容后,再使用循環(huán)逐個(gè)統(tǒng)計(jì)又字符的數(shù)組元素個(gè)數(shù),直到遇到字符串結(jié)束符\0為止 方法2:使用getchar函數(shù)逐個(gè)讀取鍵盤上輸入的字符并保存到數(shù)組中,直到遇到回車符’\n’時(shí)停止tjzf2.c#include<stdio.h>voidmain(){charc[100];inti,sum=0;for(i=0;((c[i]=getchar())!='\n')&&i<100;i++)sum++;printf("theinputfontnumber=%d",sum);getch();}例題2:編寫程序代碼統(tǒng)計(jì)用戶從鍵盤上輸入一行字符中,字母,數(shù)字,空格和其他字符的個(gè)數(shù)。例如:鍵盤輸入Monday.則顯示字母有9個(gè),數(shù)字2個(gè),空格4個(gè),其他字符1個(gè)#include<stdio.h>voidmain(){charc[100];inti,zm=0,sz=0,kg=0,qt=0;gets(c);…….}#include<stdio.h>voidmain(){charc[100];inti,zm=0,sz=0,kg=0,qt=0;gets(c);for(i=0;c[i]!=‘\0’;i++){if('A'<=c[i]&&c[i]<='Z')zm++;elseif('a'<=c[i]&&c[i]<='z')zm++;elseif('0'<=c[i]&&c[i]<='9')sz++;elseif(c[i]=='')kg++;elseqt++;}printf("zm=%dsz=%dkg=%dqt=%d",zm,sz,kg,qt);}Pdzf.c例6.21利用字符指針把字符串s1復(fù)制到字符串2main(){chars1[]="Hello,World!",s2[15];char*from=s1,*to=s2;while(*from){*to=*from;to++;from++;}*to='\0';puts(s1);puts(s2);}main(){chars1[]="Hello,World!",s2[15];char*from=s1,*to=s2;while(*from){*to=*from;to++;from++;}*to='\0';puts(s1);puts(s2);}s1[0]s1[1]s1[2]s1[3]s1[4]…s1[11]s1[12]Hello…!\0s2[0]s2[1]s2[2]s2[3]s1[4]…s2[13]s2[14]例6.22利用字符指針比較字符串s1、s2的大小#include"stdio.h"main(){chars1[80],s2[80];char*str1=s1,*str2=s2;intd=0;printf("Inputstrings1ands2:\n");gets(str1);gets(str2);while(*str1&&*str2){d=*str1-*str2;if(d!=0)break;str1++,str2++;}if(d==0)d=*str1-*str2;printf("%d\n",d);}#include"stdio.h"main(){chars1[80],s2[80];char*str1=s1,*str2=s2;intd=0;printf("Inputstrings1ands2:\n");gets(str1);gets(str2);while(*str1&&*str2){d=*str1-*str2;if(d!=0)break;str1++,str2++;}if(d==0)d=*str1-*str2;printf("%d\n",d);}s1[0]s1[1]s1[2]s1[3]s1[4]s1[5]…s1[79]s2[0]s2[1]s2[2]s2[3]s2[4]s1[5]…s2[79]例6.23將字符串s1、s2連接后存放到s1#include"stdio.h"main(){chars1[80],s2[80];inti=0,j=0;printf("Inputstrings1ands2:\n");gets(s1);gets(s2);while(s1[i]!='\0')i++;while(s1[j]!='\0'){s1[i]=s2[j];i++;j++;}s1[i]='\0';puts(s1);}例6.23將字符串s1、s2連接后存放到s1#include"stdio.h"main(){chars1[80],s2[80];inti=0,j=0;printf("Inputstrings1ands2:\n");gets(s1);gets(s2);while(s1[i]!='\0')i++;while(s1[j]!='\0'){s1[i]=s2[j];i++;j++;}s1[i]='\0';puts(s1);}s1[0]s1[1]s1[2]s1[3]s1[4]s1[5]…s1[79]ABC\0s2[0]s2[1]s2[2]s2[3]s2[4]s1[5]…s2[79]de\0例6.24將字符串s1中的所有大寫字母轉(zhuǎn)換成小寫字母,將字符串s2中的所有小寫字母轉(zhuǎn)換成大寫字母#include"stdio.h"main(){chars1[]="BeiJing2008",s2[]="BeiJing2008";char*str1,*str2;str1=s1,str2=s2;while(*str1!='\0'){if((*str1>='A')&&(*str1<='Z'))*str1+=32;str1++;}while(*str2!='\0'){if((*str2>='a')&&(*str2<='z'))*str2-=32;str2++;}puts(s1);puts(s2);}例6.25刪除一個(gè)字符串中所有的空格字符#include"stdio.h"main(){chars[80],*p1,*p2;

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論