字元型資料(字元常量和字串常量)使用及區別
阿新 • • 發佈:2019-01-09
1-字元型
在各種不同系統中,字元型別都佔一個位元組(8位)。定義如下:char c='a';//C 語言中,使用單引號把字元引起來構成字元常量,雙引號"abc"是字串常量也可以用字元對應的ASCII碼賦值,如下:
char c=97;
char c='good';得到的是最後一個字元 即'd'
C語言是ASCII碼的形式儲存字元型變數的,儲存形式與整數類似,所以字元型和整數(範圍0-255)之間可以通用。
2-字串
I -在c語言中,將字串作為字元陣列來處理。(c++中不是)II-長度(佔用記憶體位元組)
在實際應用中人們關心的是有效字串的長度而不是字元陣列的長度,C語言規定了一個“字串結束標誌”,以字元'\0'代表
系統對字串常量也自動加一個'\0'作為結束符。例如"C Program”共有9個字元,但在記憶體中佔10個位元組,最後一個位元組'\0'是系統自動加上的。(通過sizeof()函式可驗證) char two[]="abcd"; cout<<sizeof(two); //輸出為5 strlen 函式原型為: int mystrlen(const char *str){ //assert(str); const char *p=str; while(*p++ != NULL); // or !='\0' return p-str-1; }
3-strlen 和sizeof區別
strlen(char*)函式求的是字串的實際長度,它求的方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。
char aa[10];cout<<strlen(aa)<<endl; //結果是不定的
char aa[10]={'\0abc'}; cout<<strlen(aa)<<endl; //結果為0
char aa[10]="jun"; cout<<strlen(aa)<<endl; //結果為3
而sizeof()返回的是變數聲明後所佔的記憶體數,不是實際長度4-兩種初始化的長度對比
#include <stdio.h> #include <string.h> int main() { char c1[]={'I',' ','a','m',' ','h','a','p','p','y'}; char c2[]="I am happy"; int i1=sizeof(c1); int i2=sizeof(c2); char str1[20]="12345"; printf("size c1:%d\n", i1);//10 printf("size c2:%d\n", i2);//11 printf("length:%d\n",strlen(c2));//10 printf("%d %d\n",sizeof(str1),strlen(str1));//20 5 return 0; }5-字串的表示形式
在C語言中,可以用兩種方法表示和存放字串:
(1)用字元陣列存放一個字串
char str[ ]="I love China";
(2)用字元指標指向一個字串
char* str="I love China";
C語言對字串常量是按字元陣列處理的,在記憶體中開闢了一個字元陣列用來存放字串常量,程式在定義字串指標變數str時只是把字串首地址(即存放字串的字元陣列的首地址)賦給str。
int main(){char* a ="helko";
char* s[]={"how","are","you"};
int lenthS=0;
char ss[100]="\0abcd";
printf("a[2]=%c\n",*(a+2));//a[2]=l
printf("%s\n",a+1);//elko
lenthS = sizeof(s)/sizeof(char*);
printf("lenthS=%d\n",lenthS);//3
printf("%s\n",*(s+1));//are
printf("lenth of SS:%d\n",strlen(ss));//0
return 0;
}
6-字串gets 和 scanf()的區別
scanf( )函式和gets( )函式都可用於輸入字串,gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。char string[15];
gets(string); /*遇到回車認為輸入結束*/
scanf("%s",string); /*遇到空格認為輸入結束*/
所以在輸入的字串中包含空格時,應該使用gets輸入;
7-字串轉換函式 strlwr()函式:將字串中的大寫字母換成小寫字母。 strupr()函式:將字串中的小寫字母換成大寫字母。 注:此函式是直接對原字串進行操作,字串的值會改變;int main(){
char a[]="zbc";
char b[]="ASD";
printf("before:%s\n",a);
printf("Uper:%s Lower:%s\n",strupr(a),strlwr(b));
printf("after;%s\n",a);
return 0;
}