字符串和字符串函數

字符串

字符串是以空字符(\0)結尾的char類型數組。

在程序中定義字符串

字符串字面量

  • 用雙引號括起來的內容稱爲字符串字面量,也叫做字符串常量

    char greeting[50] = "Hello!";  
    
  • 字符串常量屬於靜態存儲類別,這說明如果在函數中使用字符串常量,該字符串只會被儲存一次,在整個生命週期存在。

數組和指針的區別

     char ar1[] = "Something is point at me.";
     char * pt1 = "Something is point at me.";
  • 在數組形式中,ar1是地址常量。不能更改ar1,如果改變了ar1,則意味着改變了數組的存儲位置(即地址)。可以進行類似ar1+1這樣的操作,標識數組的下一個元素。但是不允許進行++ar1這樣的操作。
  • 指針變量(pt1)最初指向該字符串的首字符,但是它的值可以改變。因此可以使用遞增運算符,++pt1將指向第二個字符’o’。

總之,初始化數組把靜態存儲區的字符串拷貝到數組中,而初始化指針只把字符串的地址拷貝給指針。

字符串函數

輸入、輸出函數

puts()

接受一個字符串,輸出到屏幕上,末尾自動加換行符。

fgets()和fputs()

fgets(char類型數組,int,文件指針)

  • fgets()函數的第二個參數指明瞭讀入字符的最大數量。如果是n,那麼fgets()將讀入n-1個字符,或者讀到遇到的第一個換行符爲止。
  • 如果fgets()讀到一個換行符,會把它存儲在字符串中
  • fgets()函數的第三個參數指明要讀入的文件。如果讀入從鍵盤輸入的數據,則以stdin(標準輸入)作爲參數。
  • fgets()返回指向char的指針,如果一切進行順利,返回的地址應與第一個參數地址相同;若讀到文件結尾,返回空指針(NULL)。

fputs(char類型數組,文件指針)

  • fputs()函數的第二個參數指明要寫入數據的文件,如要打印在顯示器上,用stdout(標準輸出)。
  • fputs()不會在末尾加換行符

字符串函數

strlen()

  • 接受一個字符串作爲參數,返回它的長度。

strcat()和strncat()

  • strcat()用於拼接字符串,接受兩個字符串作爲參數,把第二個字符串的備份附加在第一個字符串末尾,返回第一個參數(即拼接後第一個字符串的地址)。
  • strncat()前兩個參數與strcat()相同,第三個參數指定了最大添加字符數。例如,strncat(bugs,addon,13)將把addon字符串的內容附加給bugs,在加到第13個字符或遇到空字符時停止(無論哪種情況都要添加空字符)。

strcmp()和strncmp()

  • strcmp()接收兩個字符串作爲參數,若相同則返回0,strcmp()依次比較每個字符直到發現不同的字符爲止,比較的依據是機器排序序列,即字符的數值,通常是ASCⅡ值(第一個參數的減去第二個參數的)。
  • strncmp()函數在比較兩個字符串時,可以比較到字符不同的地方,也可以只比較第3個參數指定的字符數

strcpy()和strncpy()

  • strcyp()是字符串賦值函數,接受兩個字符串指針作爲參數,可以把指向源字符串的第2個指針聲明爲指針、數組或字符串常量;而指向源字符串副本的第一個指針應指向一個數據對象(如,數組),且該對象有足夠的空間儲存源字符串的副本。聲明數組將分配存儲數據的空間,聲明指針只分配存儲一個地址的空間
  • strcpy()返回類型是 char *,是第一個參數的值,即一個字符的地址。第一個參數不必指向數組的開始,這個屬性可以用於拷貝數組的一部分。
  • strncpy()第3個參數指明可拷貝的最大字符數。

sprintf()

  • 第一個參數是一個char類型數組,把獲取的輸入格式化爲表純形式儲存在其中。(類比printf)。

char *strchr(const char * s, int c);

  • 如果s字符串中包含c字符,返回指向s字符串中首次出現c字符的地址,沒找到,返回NULL。

char *strrchr(const char * s, int c);

  • 如果s字符串中包含c字符,返回指向s字符串中最後出現c字符的地址,沒找到,返回NULL。

char *strpbrk(const char *s1, const char *s2);

  • 如果s1字符串中包含s2字符串中的任意字符,返回s1中首次出現s2中字符的地址,否則返回NULL。

char *strstr(const char *s1, const char *s2);

  • 該函數返回s1字符串中s2字符串出現的收位置,否則返回NULL。
發佈了27 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章