c語言入門:[18]字符串初探?

以前我們學習中只重點使用了整型數據、浮點數據和字符數據,今天我們介紹另一種數據字符串,從名字上你就可以知道字符串是由若干個字符串聯起來組成的,在c語言裡字符串要用雙引號引上例如 "abc" "23#sdf" "你好" 都是字符串。

其實下面這段代碼在邏輯上沒什麼意義,但你在編譯器上運行不會報錯,這說明字符串是c語言可以處理的一種數據類型。

int main()

{

"abc123";

}

如果我們把 "abc123"看成是一個密碼,那我們需要把它先存起來,用什麼存呢?整數用int型變量來存,浮點數用float型變量來存,字符用char型變量來存,但c語言裡沒有字符串型,所以我們還得把字符串分解,因為字符串是由若干個字符組成的所以我們用字符數組來存儲字符串裡的每個字符。

現在我們把 "abc123" 存起來

char a[6];

a[0]='a';

a[1]='b';

a[2]='c';

a[3]='1';

a[4]='2';

a[5]='3';

上面這種寫法實在是太麻煩了,所以c語言提供了一種給數組初始化的簡單形式,這裡所說的初始化就是在定義的時候就給數組裡的元素賦上初始的值。

char a[6]={'a','b','c','1','2','3'};

這是一種通用的給數組初始化的方法,其它類型數組也同樣適用,例如

int a[3]={1,3,56}; float a[5]={1.4,3.45,4546,78.9,0}

記住定義和賦初始值一定是寫在一起才表示初始化,絕不代表數組裡的變量能一起操作,例如下面的寫法就是錯誤的;

int a[3];

a={1,2,56};//這裡不是初始化,因為a數組已經定義完了,c語言環境會認為這是一個賦值運算,你能給a[0]、a[1]和a[2]賦值但確不能給a賦值,數組裡的元素不能一起操作因為他們是三個變量。

特殊的在c語言裡支持直接使用字符串初始化。

char a[7]= "abc123";

這種初始化方式,數組的長度要多一位,因為系統默認會在字符串的尾巴上加上一個結束符'',多出的一位就是存儲這個結束符號的,這個結束符的作用就是用來標識字符串的結尾,一會我們講的puts函數就使用了這個結束符。這裡再強調一遍下面這樣寫是錯誤的。

char a[7];

a= "abc123"; //這裡不是初始化

數組的初始化我們就先講到這裡。上節結尾我們講到了可以利用循環來給數組裡的元素從鍵盤賦值當然也可以利用循環輸出數組裡的每個元素,為了輸入輸出方便不用每次都寫循環我們可以利用gets函數來從鍵盤讀入字符串,利用puts向屏幕輸出字符串,請看下面的代碼

int main()

{

char a[100];

printf("請輸入密碼:");

gets(a);//利用gets把從鍵盤輸入的字符串裡的每個字符都存放到a數組裡並在最後存儲一個結束符''

printf("你輸入的密碼是:");

puts(a);//利用puts把a數組裡的每個字符都輸出到屏幕上

}

因為我們不知道用戶輸入多少個字符,又因為那個黑色窗口一行最多也不會超過100個,所以把數組長度定義為100足夠了

gets和puts函數的用法很簡單,你只需要在小括號裡寫數組的名字即可。

puts函數是一個一個字符輸出遇到結尾標識''就停止輸出,例如運行下面的代碼你會發現並沒有輸出@

int main()

{

char a[100]="abc";

a[5]='@';

puts(a);

}

我們可以利用字符串中的''來統計有效字符個數例如

int main()

{

char a[100];

int i=0;//數組下標

printf("輸入一個字符串:");

gets(a);

while(a[i]!='\0')

{

i=i+1;

}

printf("你輸入的字符串中有%d個字符",i);

}

解析:挨個訪問數組裡的字符,如果是''則退出循環,此時i的值是''的下標也正好是數組裡有效字符的個數。

留個練習你能完成嗎?

int main()

{

char p[7]="abc123"; //正確的密碼已經存放在p裡

char a[100];//用來存儲用戶從鍵盤輸入的密碼

printf("請輸入密碼:");

gets(a);

/*------------

在這裡加一些代碼,能夠判斷用戶輸入的密碼是否正確

-------------*/

}

c語言入門 (共30篇) 上一篇:數組初探1 下一篇:函數初探

語言, 字符串, 數組, 初探,
相關問題答案