注:本文是對蘇小紅版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...