




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1.字符型數據C程序設計語言采用了ASCII標準字符集來提供對字符數據的支持。ASCII字符集提供了127個字符的編碼。組成如下:字母:大寫英文字母A~Z,小寫字母a~z數字:0~9專門符號:29個,包括:!“等等空格符:空格、水平制表符(tab)、垂直制表符號等等轉義字符:‘\n’(回車換行)‘\b’(退格)等等ASCII編碼(書本附錄P377) 在計算內部實際上是將字符以整數形式存放在內存單元中的。這個整數實際上就是字符的ASCII編碼 例如:大寫字母’A’的ASCII編碼是65,‘Z’的編碼是90小寫字母’a’的ASCII編碼是97,’z’的編碼是122數字字符’0’的ASCII編碼是49,‘9’的編碼是57空格字符’‘的ASCII編碼是32
注意:
(1)C語言中字符常量是由1個字符構成的數據.
(2)在程序中,字符常量必須用單引起括起來,所以’1’和1是兩個完全不同的對象。前者是字符,后者是一個數字.字符變量 字符變量是用類型符char定義的變量。一個字符變量只能存儲一個ASCII字符。
例如:charc;
正確的代碼:c=‘?’;
錯誤的代碼: c=‘?!’; c=“abc”;
2.字符串常量 由多個字符組成的數據稱為字符串常量(以后簡稱字符串),字符串常量的兩邊必須用雙引號包含起來。
例如:“thisisastring.”或“china”在C程序設計語言中,字符串常量使用數組保存。區別字符字符串形式用單引號括起來用雙引號括起來數量1個字符大于等于一個字符字符串在內存中的存儲方式是,按順序存儲每個字符的ASCII編碼值,如下圖所示。每個字符串的末尾都附有一個特殊字符\0,稱為字符串結束標志。C語言中沒有字符串變量,因此要保存字符串常量的話需要借助字符數組.6.3字符數組 P154字符數組使用char關鍵字進行定義,一般形式如下:char數組名[數組長度];例如:
定義字符數組c,并將字符逐一保存到字符數組中. 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’‘m’‘’‘h’‘a’‘p’‘p’‘y’‘\0’‘\0’…注意:余下的數組元素用空字符’\0’填充字符串和字符串結束標志’\0’可以直接使用字符串常量來賦值字符數組,例如: charc[20]={“Iamhappy”};或簡寫成charc[20]=“Iamhappy”;
和上一個例子相同,字符串中的字符是逐個存放到數組元素中的。唯一的區別是,C系統在用字符數組存儲字符串常量時會自動在末尾加一個’\0’作為字符串結束標志。所以上面的程序實際上是存儲了11個字符數據到數組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’‘m’‘’‘h’‘a’‘p’‘p’‘y’‘\0’……字符數組的輸出方法 P159(一)逐個字符輸出
使用printf語句和%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]);}(二)將整個字符串一次輸出,使用printf和%s格式符例C6-6-2.C#include<stdio.h>main(){charc[11]="Iamhappy";printf("%s",c);getch();}用%s格式符輸出字符串時,printf函數中的輸出項是字符數組名說明:輸出的字符不包括結束符’\0’如果數組長度大于字符串實際長度,輸出到’\0’結束例如:charc[10]=“China”;只輸出有效的字符5個如果字符數組中包含一個以上’\0’,則遇第一個’\0’時輸出就結束。例如 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’字符數組的輸入 可以用scanf函數輸入一個字符串。
例如: charc[20]; scanf(”%s”,c); 注意:scanf函數中的輸入項c是已定義的字符數組名,數組名前面不要加&,因為C語言中數組名代表該數組的地址。6.3.6字符串處理函數puts()函數 作用:是將一個字符串(以’\0’結束的字符序列)輸出到屏幕。使用方式為:puts(字符數組名);例如: charstr[]={“china\nBeijing”};puts(str);gets()函數 作用:作用是從終端輸入一個字符串到字符數組。使用方式為:gets(字符數組名);例如: charstr[200];gets(str);二維字符數組若需要存放多個字符串,則可以使用二維字符數組定義二維字符數組的語法格式char數組名[整型常量][整型常量];例如:chararr[3][10];例題6.15二維字符數組單個元素引用#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");}}操作字符串的函數下面介紹字符串處理函數,使用這些有特殊功能的函數時,ANSIC標準要求必須包含頭文件”string.h”,即程序的開頭要有#include“string.h”strcat函數用于連接兩個字符數組中的字符串。即把字符串2接到字符串1的后,并將結果保存在字符數組1。strcat(字符數組1,字符數組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函數strcpy是字符串復制函數。作用是將字符串2復制到字符數組1中去。其一般形式為:strcpy(字符數組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關于strcpy函數的幾點說明字符數組1必須定義得足夠大。字符數組1必須寫成數組名形式,字符串2可以是字符數組名,也可以是一個字符串常量。 如:strcpy(str1,”China”);復制時連同字符串后面的’\0’一起復制到字符數組1不能用賦值語句將一個字符串常量或字符數組直接給一個字符數組。如:str1=″China″;不合法str1=str2;不合法strcmp函數
其一般形式為:strcmp(字符串1,字符串2)
strcmp的作用是比較字符串1和字符串2。比較的結果由函數值帶回如果字符串1=字符串2,函數值為0。如果字符串1>字符串2,函數值為一正整數。如果字符串1<字符串2,函數值為一負整數例如:E5.C比較規則:按字母的ASCII碼比較注意:對兩個字符串比較,不能用str1>str2strlen函數strlen是測試字符串長度的函數。函數的值為字符串中的實際長度(不包括’\0’)。其一般形式為:strlen(字符數組)例如:
charstr[10]={“China”}; printf(“%d“,strlen(str));輸出結果不是10,也不是6,而是5。strlwr函數和strupr函數
strlwr函數的作用是將字符串中大寫字母換成小寫字母。其一般形式為:strlwr(字符串)strupr函數的作用是將字符串中小寫字母換成大寫字母。其一般形式為:strupr(字符串)6.3.3指向字符串的指針變量可以定義一個指向字符的指針變量來指向存放字符串的首地址,這種指針變量就稱為指向字符串的指針變量。 例如:char*ptr=“Thisisastring”;
說明:系統分配一塊長度為字符串字符個數加上1的連續內存空間用于存放該字符串,然后將連續內存空間的首地址賦給字符指針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內存指向字符數組的指針變量 可以定義一個字符指針指向一字符數組。例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();}字符串應用舉例例題1:統計用戶從鍵盤上輸入字符串中字符的個數。#include<stdio.h>voidmain(){charc[100];inti,sum=0;gets(c);for(i=0;c[i]!='\0';i++)sum++;printf("theinputfontnumber=%d",sum);}循環終止條件c[i]!=‘\0’當遇到存儲字符串結束符的數組元素時,則循環停止。tjzf1.c方法1:使用gets函數完整讀取輸入的內容后,再使用循環逐個統計又字符的數組元素個數,直到遇到字符串結束符\0為止 方法2:使用getchar函數逐個讀取鍵盤上輸入的字符并保存到數組中,直到遇到回車符’\n’時停止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:編寫程序代碼統計用戶從鍵盤上輸入一行字符中,字母,數字,空格和其他字符的個數。例如:鍵盤輸入Monday.則顯示字母有9個,數字2個,空格4個,其他字符1個#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復制到字符串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中的所有大寫字母轉換成小寫字母,將字符串s2中的所有小寫字母轉換成大寫字母#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刪除一個字符串中所有的空格字符#include"stdio.h"main(){chars[80],*p1,*p2;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 手術室護士長培訓總結匯報
- 碳酸飲料行業的企業戰略與發展規劃考核試卷
- 助動車執行器故障診斷考核試卷
- 英語人教版 (PEP)Unit 2 My favourite season Part A教學設計及反思
- 榨汁機刀片更換考核試卷
- 水產養殖病害診斷與防治考核試卷
- 電梯乘客信息安全保護的技術發展趨勢與法規更新考核試卷
- 社會中的城市化與城市發展考核試卷
- 森林生態系統服務評估考核試卷
- 供電局禮儀培訓大綱
- 2025陜煤集團榆林化學有限責任公司招聘(137人)筆試參考題庫附帶答案詳解
- 小學生三減三健課件
- 2024-2025學年浙江省杭州市建德市壽昌中學高二下學期第二次檢測數學試卷(含答案)
- 總包單位與分包單位臨時用電管理協議書
- 2025屆浙江省溫州市高三二模數學試題及答案
- GB/T 15180-2025重交通道路石油瀝青
- 四川成都農業科技中心招聘考試真題2024
- 淄博藝術中考試題及答案
- 2025年江蘇省文科大學生自然科學知識競賽題庫及答案(1-1077題)
- 中國農業銀行筆試真題含解析
- 2025新人教版七年級英語下冊期中測試卷(含答案)
評論
0/150
提交評論