1.在C語言中,是將字符串作為字符數組來處理的,字符串是逐個存放到數組元素中的
例如用一個一維的字符數組存放字符串"I am a boy.",如下代碼:
char c[12] = {'I','a','m','a','b','o','y','.'};
這個字符串的實際長度是11,數組長度是12,實際工作中,人們關心的往往是字符串的有效長度而不是字符串的數組長度,例如要打印字符串,這是就要知道字符串的實際長度。平時常使用下面三種方式來測定字符串的實際長度:
(1)在串值後面加一個不計入長度的結束標記字符,比如'\0'來表示串值的終結
初始化一個字符串的方法如下,在最後添加'\0'
char str[] = {'I','a','m','h','a','p','p','y','\0'};
也可以直接使用字符串常量初始化字符數組(系統自動加上'\0'),這種方法符合人們的習慣。
char str[] = "I am happy";
或者
char str[] = {"I am happy"};
注意:不能使用下面的賦值方式:
char str[20];
str = "I am happy";
但可以用字符指針指向這個字符串:
char *str;
str = "I love China";
(2)將實際串長度值保存在數組0的下標下
#define MAXSIZE 20 //數組的長度
typdef char String[MAXSIZE+1];
初始化字符串的方法:
String t;
StrAssign(t,"I am happy");
int StrAssign(String T,char *chars)
{
T[0] = strlen(chars); //下標為0存放數組長度
for(i=1;i<=strlen(chars);i++) //下標位置從1開始存放數據
{
T[i] = *(chars+i-1);
}
return 1;
}
(3)使用結構體類型(自定義類型)
#define MAXSIZE 20
typedef struct{
char ch[MAXSIZE];
int len;
}String;
其中:MAXSIZE表示串的最大長度,ch是存儲字符串的一維數組,len是字符串的長度
初始化函數示例:
String t;
StrAssign(&t,"I am happy");
int StrAssign(String *t,char *chars)
{
int i;
if(strlen(chars)>MAXSIZE+1) //字符串的長度大於數組的長度,操作失敗,返回0
return 0;
for(i=0;i<strlen(chars);i++)
{
t->ch[i] = *(chars+i);
}
t->len = strlen(chars); //數組的長度
return 1; //返回1,操作成功
}
說明:這裡的StrAssign函數的參數t使用的是指針,是因為結構體變量做做形參,用法和普通變量一樣屬於值傳遞方式,在子函數中要給t賦值,所以輸入的是t的指針。與之對比的是(2)子函數中T是數組,傳入的是數組的首地址(改變形參也就改變了實參)。