字元陣列與字串

2021-06-19 23:24:28 字數 3008 閱讀 7860

字元陣列與字串 

字串就是字元的序列,可看作單個資料項。定義在雙引號之間的字元組(雙引號除外)就是乙個字串常量。例:"man is abviously made to think"。

字串變數的宣告與初始化:c語言並不支援字串資料型別。但是,它允許作為字元陣列來表示字串。因此在c語言中,字串變數就是任何合法的c變數名,且總是被宣告為乙個字元陣列。其宣告的一般形式為char  string_name[size];    size確定了string_name的字元數。如:char city[10];char name[30];當編譯器把字串賦給字元陣列時,自動的在字串的末尾加上空字元('\0')。因此,size必須大於等於字串中的最大字元數再加上1。

c語言允許以下兩種方式初始化:char city[9]="new york"; char city[9]=;

c語言可以不用指定元素的數目來初始化字元數目,這時陣列的大小將根據初始化元素的數量自動確定。

可以把陣列的大小定義的字串更大。如char city[100]="good";是合法的。而下面的這個就不合法char city[2]="what";這將導致編譯器的乙個錯誤。不能把初始化從宣告中分隔出來,如:

char str3[5];

str3[5]="what";

是不允許的。

下面這個語句也是不允許的:

char a[4]="abc";

char b[4];

b=a;

陣列名不能用作賦值運算子的左運算元。

使用scanf函式從終端讀取字串:

一般格式為   char address[size];

scanf("%s",address);

這種讀取方法的問題是,一量遇到空白符(包括空格、制**、回車符、樣式縮排和換行符),就停止輸入。所以如果在終端輸入如下的文字行:new york則只有字串new讀入陣列address中。

如果要讀取整行的字元"new york",就要使用兩個大小適合的字元陣列。

main()

寫乙個程式,使用scanf函式從終端讀取一系列數。

main()

輸入:oxford road, london m17ed

輸出:oxford

road,

london

m17ed

也可以scanf語句中使用%ws格式說明符指定欄位的寬度,用於從輸入字串中讀取指定數量的字元。

在上面的例子第五行中,把"%s%s"改為"%2s%s",則輸出:

oxford

road,

london

字串處理函式(puts,gets,strcat,strcpy and strncpy,strcmp,strlen,strlwr,strupr)

1:puts函式

一般形式 puts(字元陣列)

作用是將乙個字串(以'\0'結束的字串行),輸出到終端。

main()

;puts(str);

}輸出:i

love

china

2:gets函式

一般形式 gets(字元陣列)

作用是從終端輸入乙個字串到字元陣列,並且得到乙個函式值。該函式值是字元陣列的起始位址。

main()

輸入:sorry seems to be the hardest word.what i got to do to make you love me?

輸出:sorry seems to be the hardest word.what i got to do to make you love me?

注意用puts和gets函式只能輸出或輸入乙個字串,不能寫成

puts(str1,str2)或gets(str1,str2)

3:strcat函式

一般形式 strcat(字元陣列1,字元陣列2)

其作用是邊接兩個字元陣列中的字串,把字串2邊接到字串1的後面,結果放在字元陣列1中,函式呼叫後得到乙個函式值——字元陣列1的位址。

main()

;char str2=;

printf("%s",strcat(str1,str2));

getch();

}輸出:what i got to do to make you love me.sorry seems to be the hardest word

連線前兩個字串的後面都有'\0',連線時將字串後面的'\0'取消,只在新串啊後保留'\0'.

main()

該函式是從終端輸入兩個字串,並顯示出來。

4 strcmp函式

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

它的作用是比較字串1和字串2。可有以下幾種形式:

strcmp(str1,str2);

strcmp("china","korea");

strcmp("str1,"beijing");

字串比較的規則與其它語言中的規則相同,即對兩個字串自左至右逐個字元相比(按ascii碼值大小比較),直到遇到不同的字元或遇到'\0'為止。如:

"a">"a","computer">"compare","dog"<"cat"...

比較的結果由函式值帶回。

如果字串1=字串2,則函式值為0;

如果字串1>字串2,則函式值為乙個正值;

如果字串1《字串2,則函式值為乙個負值;

#include

main()

else

}5 strlen函式

一般形式為strlen(字元陣列)

它的作用是測試字串長度的函式。函式的值為字串中的實際長度,不包括'\0'。例:

char str[10]=;

printf("%d",strlen(str));

輸出的結果不是10,也不是6,而是5。

6 strlwr函式和strupr函式

其一般形式為strlwr(字串);

作用是將字串中的大寫字母轉換成小寫字母。

strupr函式與strlwr函式正好相反,它是把字串中的小寫字母轉換成大寫字母。

字元陣列與字串

字元陣列與字串 6.3.1 字元陣列的逐個字元操作 案例6.5 從鍵盤輸入乙個字串,回車鍵結束,並將字串在螢幕上輸出。main i 0 while str x0d printf c str i printf n getch 1 字元陣列的定義 1維字元陣列,用於儲存和處理1個字串,其定義格式與1維數...

字元陣列與字串

char str 6 char str2 6 world printf s n str scanf s str2 for i 0 str i 0 i 說明 系統為了明確區分記憶體上的字串從屬關係,它會去尋找空字元,ascii嗎為0 我們稱為結束符,從陣列名指標位一直往後找,知道找到空字元為止。既然字...

字串與字元陣列

用scanf輸入字串 include int main scanf s s s 的作用就是輸入乙個字串的,scanf是以回車鍵作為輸入完成標示的,但回車鍵本身並不會作為字串的一部分 如果scanf引數中的陣列長度小於使用者在鍵盤輸入的長度,那麼scanf就會緩衝區溢位,導致程式崩潰 int i fo...