二、字符串?dāng)?shù)組
上面講的都是存放數(shù)值的,有一類數(shù)組,用來處理字符串的,我們叫字符串?dāng)?shù)組。其實字符串?dāng)?shù)組也是二維數(shù)組,只是它的特殊性,才單獨拿出來說的。
main()
{
char s[10][10];
int i;
for(i=0;i<10;i++) scanf(%s,s[i]);
}
先看它的輸入特性,前面在說輸入語句的時候說過,遇到字符串輸入,可以不加'&',現(xiàn)在只要記住這個特性就可以,以后說指針的時候再講為什么。但是這兒為什么用s[i],可能很多人不太明白。我們定義的是二維數(shù)組,而輸入的時候,卻使用一維數(shù)組的形式。這是因為字符串在內(nèi)存里地址可以用它的名字表示,就好象這種形式:
main()
{
char s[10];
scanf(%s,s);
}
定義的是一維數(shù)組,輸入語句用變量形式表示一樣。通過前面的'%s'形式可以看出,s[i]是一個數(shù)組,所以s就是二維數(shù)組了。
這里要注意一點,scanf()函數(shù)在輸入字符串時候不能支持空格,看下面的例子:
main()
{
char s[3][10];
int i;
for(i=0;i<10;i++)
scanf(%s,s[i]);
for(i=0;i<3;i++)
printf(%s\n,s[i]);
}
我們輸入:1111
2222 3333
4444
我們是想把1111賦值給s[0],2222 3333賦值給s[1],4444賦值給s[2]?蓪嶋H上編譯器是這樣做的,把1111賦值給s[0],把2222賦值給[1],把3333賦值給s[2]。
實際輸出:1111
2222
3333
在輸入字符串的時候,如果使用scanf(),就把空格當(dāng)作下一個輸入了。那么我們怎么解決這個問題呢?畢竟很多情況下,一行字符串肯定有空格出現(xiàn)的。我們使用新的函數(shù)gets()。這個函數(shù)是專門接受字符串輸入的,它跳過了空格的影響。把上面的輸入語言修改為gets(s[i])即可。
我們定義了char s[3][10],超過10個字符肯定不行,如果少于10個字符,電腦怎么處理呢?電腦是在每個字符串的后面自動補(bǔ)上'\0',作為字符串的結(jié)束標(biāo)志。
我們經(jīng)常在填寫一些可選擇的內(nèi)容時經(jīng)常發(fā)現(xiàn),待選的字符串都是按字母排列好的,我們怎么用C語言實現(xiàn)這個功能?在C語言里,字符串的排序是按照字符的ASCII碼來的,如果第一個字符一樣,則比較第二個,依次類推。
main()
{
char s1[6]=addfgh,s2[5]=asdlg;
int i;
for(i=0;s1[i]!='\0'&&s2[i]!='\0';i++)
{
if(s1[i] {
printf(s1 exit(1);
}
else if(s1[i]>s2[i])
{
printf(s1>s2\n);
exit(1);
}
else ;
}
if(s1[i]=='\0' && s2[i]!='\0') printf(s1 else if(s2[i]=='\0' && s1[i]!='\0') printf(s1>s2\n);
else printf(s1==s2\n);
}
上面的例子就是比較兩個字符串大小的,先比較第一個,如果相同,接著比較第二個,如果不相同,則分出大小。一直往后比較,直到其中某一個到'\0',你也可以先用strlen()函數(shù)找出最小的長度。
相關(guān)推薦:計算機(jī)等級考試二級C語言教程匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |