c語言複習 字串

2021-09-02 05:10:50 字數 3229 閱讀 1018

注:本文是對蘇小紅版c語言程式設計第10章的筆記

字串實際就是由若干有效字元構成且以字元』\0』作為結束的乙個字串行(但字元』\0』不會顯示在螢幕上)

字元陣列是由字元構成的陣列,僅當其最後乙個元素是』\0』時才表示字串,』\0』不計入字串長度,但要計入字元陣列的長度

當省略對陣列長度的宣告時,必須人為地在陣列的初始化列表中新增』\0』,才能將其作為字串來使用。

e.g.:

char str = ;
的宣告方法是錯誤的,因為系統會將str初始化為乙個長度為5的陣列,沒有多餘的空間儲存』\0』

更簡單的宣告方法:char str = ;

或:char str = "hello";

二位字元陣列第二位長度不能省略(二位陣列是按行儲存的)

字元指標:char *ptr = "hello"

char *ptr; 

ptr = "hello"

char *ptr;

ptr = str;

char *ptr;

ptr = &str[0];

都等價

若想把ptr指向的字串的第乙個字元修改為』w』, 則可以寫成:

*ptr = 'w';
*(ptr + i) <=> *(str + i), 即 str[i]

也可以通過ptr++操作移動ptr, 但不能用str++

字串的輸入方法:

單個字元輸入/輸出,迴圈

e.g.:

for(i = 0; i < n; i++)

for(i = 0; i < n; i++)

//輸出也可以採用do-while語句,判斷條件為str[i] != '\0'

作為字串整體讀入:

scanf(「%s」, &str);

遇到空格即停止讀入,不能輸入帶空格的字串

不讀走回車,回車符仍留在緩衝區中

e.g.輸入hello world str中只有hello

gets():

以回車作為字串的終止符,並將回車從緩衝區讀走,但不作為字串的一部分。

注意:gets 和scanf都不能限制輸入字串的長度,很容易引起緩衝區溢位。所以用scanf和gets輸入字元出納時,要確保輸入字串的長度不超過陣列的大小,否則建議使用能限制輸入字串長度的函式,如:fgets(name, sizeof(name), stdin);

用puts()輸出:

函式puts用於從括號內的引數給出的位址開始,一次輸出儲存單元中的字元,當遇到第乙個』\0』時輸出結束,並自動輸出乙個換行符。

e.g.:

#include int main()
常見的字串處理函式:

|函式功能| 呼叫形式 | 注意 |

|–|--|

| 求字串長度 | strlen(str) | 不包括 『\0』 |

| 字串複製 | strcpy(str1, str2) | 將str2複製給str1(str2是模版) |

| 字串比較 | strcmp(str1, str2) | 若1>2,返回值大於0;1=2,等於0;1<2,小於0 |

| 字串連線 | strcat(str1, str2) | 將str2新增到str1末尾,並覆蓋1末尾的』\0』,呼叫後返回str1的首位址(str1應足夠大) |

| 「n族」字串複製 | strncpy(str1, str2, n) | 將str2的至多前n個字元複製到str1 |

| 「n族」字串比較 | strncmp(str1, str2, n) | 最多比較前n個字元 |

| 「n族」字串連線 | strncat(str1, str2, n) | 將2的至多前n個字元新增到1的末尾 |

注意:賦值運算不能用於字串的賦值操作,字串賦值只能使用函式strcpy()

比較字串不能直接使用 > <, 而應使用strcmp()

通常不使用計數控制的迴圈來判斷陣列元素是否遍歷結束,而使用條件控制的迴圈,利用字串結束標誌』\0』判斷字串中的字元是否遍歷結束。

const型別限定符號

const int *p = &a

int const *p = &a

以上兩種情況等價,p是乙個指標變數,而p是乙個常量。

對a執行賦值操作是合法的,執行賦值操作p = &b也是合法的,但直接對p進行賦值是不合法的。

int* const p = &a

p是常量,而*p是乙個常量。即p的指向不能改變,但a的值可以改變。

如 *p = 20是合法的,p = &b是非法的。

const int const *p = &a

p是乙個指標常量,指向乙個常數。

字元處理函式:

int isdigit(int c);判斷是不是數字,若是,返回真;否則返回假(0)

int isalpha(int c);判斷是不是字母

int isalnum(int c);判斷是不是數字或字母

int islower(int c);判斷是不是小寫字母

int isupper(int c);判斷是不是大些字母

int tolower(int c);若是大寫,則轉換成小寫字母後返回,否則返回原值

int toupper(int c);若是小寫,則轉換成大寫後返回,否則返回原值

int isspace(int c);判斷是不是空白符(』\n』, 』 ', 『\f』, 『\r』, 『\t』, 『\v』)

int iscntrl(int c);判斷是不是控制字元(』\t』, 『\v』, 『\f』, 『\a』, 『\b』, 『\r』, 『\n』)

int isprint(int c);判斷是不是包含空格在內的可列印字元

int isgraph(int c); 判斷是不是除空格以外的可列印字元

字串轉換函式

double atof(const char*nptr); 將nptr指向的字串轉換為double並返回。若首字元是字母,則無定義。

int atoi(const char *nptr);將…轉換為int並返回,…

long atol(const char *nptr);將…轉換為long並返回,…

Python複習 字串(1)

先將兩個處理字串常用的方法!split 用指定分隔符將字串從左至右分割成多個字串,並返回分割後的列表 若不指定分隔符,字串中空白符號被視為分隔符自動刪除。join 將列表中多個字串進行鏈結,並在相鄰字串間插入指定符號,返回乙個新字串 將這兩個函式連用可以做到刪除連續空白字元,並只保留乙個空白字元。s...

C語言學習 字串

字串宣告 char 變數名 數量 示例 include intmain printf 輸出字串ch2 s n ch2 方法3 char ch3 省略字串長度,長度編譯器在編譯時會幫忙計算 printf 輸出字串ch3 s n ch3 方法4 char ch4 name 此時末尾不需要加上 0 大括號...

C 語言學習 字串

c 字串 在 c 語言中國,字串實際上是使用 null 字元 0 終止的一維字元陣列。因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字串。由於在陣列的末尾儲存了空字元,所以字元陣列的大小比單詞 hello 的字元數多乙個。char greetin...