第十章 字符串

第十章 字符串

1,用一維字符數組存放字符串

在C語言中,字符串是藉助於字符型一維數組來存放的,並規定一字符’\0’作爲“字符串結束標誌”。‘\0’是一個轉義字符,稱爲“空值”,它的ASCII代碼值是0。‘\0’作爲標誌佔用存儲空間,但不計入串的實際長度。雖然在C語言中沒有字符串數據類型,但允許使用“字符串常量”。
C語言中字符串常量給出的是地址值:每一個字符串常量都分別佔用一串連續的存儲空間,這些連續的存儲空間實際上就是字符型一維數組。這些數組雖然沒有名字,C從編譯程序卻以字符串常量的形式給出存放每一字符串的存儲空間的首地址。不同的字符串具有不同的起始地址。也就是說:在C語言中,字符串常量被隱含處理成一個以‘\0’結尾的無名字符型一維數組。因此:char *sp,s[10]; s=”Hello!”是不合法的,因爲字符串常量在賦值過程中給出的是這個字符串在內存中所佔的一串連續存儲單元(即無名一維字符數組)的首地址,而s是一個不可重複賦值的數組名,而sp=”Hello!”是合法的。
字符數組和字符串的區別:字符數組的每一個元素中可存放一個字符,但他並不限定最後一個字符應該是什麼,而在C語言中,因爲有關字符串的大量操作都與串結束標誌有關,因此在字符數組中的有效字符後面加上‘\0’這一特定情況下,可以把這種一維字符型數組“看做”字符串變量,但他又不同於一般的變量。如上所示,僅可以在字符數組內存放字符串,不能通過賦值語句將字符串常量或其他字符數組中的字符串直接賦給字符串變量。
賦值:
(1)用給一般數組賦初值的相同方式給一維字符數組賦初值
char str[10]={‘s’,’t’,’r’,’I’,’n’,’g’,’\0’};
或者(2)在賦初值時直接賦字符串常量
char str[10]={“string!”};或者 char str[10]=”string!”;
(3)在C程序執行過程中給一維字符數組賦字符串
不可以用賦值語句給字符數組整體賦一串字符;給數組元素逐個賦字符值,最後人爲加入串結束標誌

2.是指針指向一個字符串

(1)通過賦初值的方式是指針指向一個字符串
如 char *ps1=”form one”;或者char str[]=”form ong”,*sp1=str;
(2)通過賦值運算是指針指向一個字符串
如:char *ps1; ps1=”form one”;或者char *ps2,str[]=”form two”; ps2=str;

在這裏插入圖片描述

3.字符串的輸入和輸出

對於字符串,可以利用%c格式說明或字符輸入、輸出函數逐個輸入、輸出字符,輸入是在後麪人爲加結束標誌,從而構成字符串,輸出時用’\0’作爲結束標誌;還可以用格式說明符%s及字符串輸入、輸出函數
(1) 輸入輸出的必要條件
當對字符串進行輸出時,輸出項既可以是字符串常量或字符數組名,也可以是已指向字符串的字符指針變量。
(2) scanf(“%s”,str);str可以是字符數組名,字符數組元素的地址或字符指針變量
printf(“%s”,str);
(3) 調用gets,puts函數在終端輸入或輸出一行字符串
char str[20];
gets(str);
puts(str);

4.字符串數組

char ca[ ][5]={“A”,”BB”,”CCC”};

A \0 ----- ------ ----
B B \0
C C C \0

char *p[3]={“a”,”bb”,”ccc”};

在這裏插入圖片描述

5.用於字符串處理的函數

在程序前面的命令行指定包含標準頭文件<string.h>
拷貝strcpy(s1,s2);
連接strcat(s1,s2);
求長strlen(s1,s2);
比較strcmp(s1,s2);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章