標準C程序設計(三)

8 字符數組與字符串
  8.1 字符串變量的聲明與初始化
      char city[9] = "New Yourk";char city[9] = {'N', 'e', 'w', 'Y', 'o', 'r', 'k', '\0'};
數組city的大小必須爲9個的原因,當編譯器把字符串符賦給字符數組時,會自動的在字符串的末尾添加空字符('\0')。字符串New York含有8個字符,另外還有一個空字符。注意,當以元素列舉的方式初始化字符數組時,必須顯示的加上空字符。
       C語言在初始化字符數組時,也可以不用指定數組的大小。數組大小根據初始化元素自動確定。
       char str[] = {'G', 'o', 'o', 'd', '\0'};
       也可以把數組的大小聲明的比初始化的字符串更大。char string[10] = "Good";
這種情況下,計算機創建一個大小爲10的字符數組,並把值“Good”置於其中,以空字符結尾,其他元素則初始化爲空字符。
       但是,後面語句是不合法的。char str1[3] = "Good";
       同時還要注意,不能把初始化從聲明中分割開來。也就是,char str2[5];str2 = "Good"; 是不允許的。
       同時,char s1[4] = "abc";char s2[4];s2 = s1;也是不允許的。數組名不能用作賦值運算符的做操作數。
用作終止的空字符:字符串不是C語言的數據類型,他是存儲在數組中的一種數據結構。字符串是長度可變的數據結構,存儲在長度固定的數組中。由於數組大小並不總是字符串的大小,大多數時候比保存在其中的字符串更大,因此,不能用數組的最後一個元素來表示字符串的結尾,而是需要某種方法來確定字符串數據的結尾。空字符就起到了“字符串結尾”標識符的作用。
8.4 在屏幕上顯示字符串
     程序及其輸出演示了%s格式說明符的以下特性:
  • 當字段寬度小於字符串長度時,顯示整個字符串;
  • 小數點右邊的整數指定要顯示的字符數;
  • 如果要顯示的字符指定爲零,那麼就什麼也不顯示;
  • 說明符中的減號是的字符串以左對齊方式顯示;
  • 說明符%.ns使得只顯示字符串的前n個字符。
printf支持使用變量字段寬度和精確度。如:printf("%*.*s\n", w, d, string );在寬度爲w的字段中顯示字符串的前d個字符。

8.5 將字符串組合在一起
     正如我們不能直接將一個字符串賦給另一個字符串一樣,我們也不能用簡單的算術加來將連個字符串結合在一起。也就是說,下面語句不合法:str3 = str1 + str2;str2 = str1 + "hello";
8.6 字符串處理函數<string.h>
函數 形式 操作
strcat() strcat(str1, str2)
連接兩個字符串,str2附加到str1
strcmp() strcmp(str1, str2) 比較兩個字符串,相等則值爲0,否則返回不等字符的差值
strcpy() strcpy(str1, str2) str2的內容賦給str1
strlen() strlen(str1) 返回字符串中字符數(不包括終止符)
strncpy() strncpy(s1, s2, 5) 把s2中前5個字符複製到s1
strncmp() strncmp(s1, s2, n) 把s1和s2最左邊的n個字符進行比較
strncat() strncat(s1, s2, n) 把s2最左邊的n個字符連接到s1的末尾
strstr() strstr(s1, s2) 查找s1是否包含s2,返回s2首次出現的位置。否則,返回空指針
strchr() strchr(s1, 'm') 定位'm'在字符串s1中首次出現的位置
strrchr() strrchr(s1, 'm') 定位'm'在字符串s1中最後出現的位置

8.6.1 strcat()函數形式: strcat(str1, str2);
         該函數,將str1後的'\0'刪除後,把str2放置於其後,即把str2附加到str1上。

下面語句也是合法的: strcat(str1, "good"); strcat(strcat(str1, str2), str3);要保證str1足夠大
8.6.2 strncpy(s1, s2, 5)由於前5個字符可能不包括終止符,因此必須顯示的在s1的第6個位置放置一個終止符,如下:
         s1[6] = '\0';
注意:
  • 當要創建一個數組來存儲位置大小的字符串變量時,可以用次表達式計算字符串的大小:strlen(strname) +1;
  • 當把一個字符串複製或連接到另一個字符串中時,應確保目標字符串具有足夠的空間。記住,如果存儲空間不夠,不會給出任何消息。在複製時,可能導致內存覆蓋,發生未知錯誤。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章