字串是指使用『\0』終止的字串陣列。
char a[6]
=;char
* b =
"hello"
;
以上的字串在記憶體中的表示為
函式作用
strcpy(s1,s2)
將s2字串的內容複製給s1
strcat(s1,s2)
將s2字串的內容拼接到s1後面,返回s1
strlen(s1)
返回s1的字元長度
strcmp(s1,s2)
從頭開始比較s1和s2的字串,返回這個字元的差值
strchr(s1,ch)
返回s1字串中含有ch字元的位置index
strstr(s1,s2)
返回s1中的s2字串位置
其中的s1,s2都是指向字串的指標。
string是std命名空間中的乙個類,能夠給字串分配動態的記憶體。它是在上面函式的基礎上再新增了一些方法。
方法描述
在string物件s的結尾加上ch字元。
find(s1.begin(),s1.end(),s2)
在s1字串的開始帶結尾中找到子字串s2,返回迭代器
insert(p1,ch)
length(s1)
求出string物件s1的長度
replace(s1.begin(),s1.end(),舊字元,新字元)
在s1的開始到結束位置的所有舊字元換成新字元
其他方法
能夠動態擴充套件字串的大小,重構了+操作符,能夠拼接字串。在編碼的時候建議使用string型別。
在宣告和初始化的時候,指向常量字串。
一般情況下,在初始化和宣告的時候用乙個常量指標指向字串。
ps:const char* 指靜態字元指標,指標不能改變;char* const指指向靜態字元的指標,字元是可讀的不能改變。
字元陣列,乙個字串。
char
* a =
"abcd"
;char b=
"abcd"
;
這兩者的區別:
變數指標a指向常量abcd;不能變化的常量b指向能夠變化的陣列「abcd」。
其實,char* a = "abcd";
是不規範的,正確的寫法為const char* a = "abcd";
。在不規範的情況下,如果使用get(a,「others」),向a所指向的記憶體中寫入資料的話,會報錯,因為abcd是指向常量的,是不能改變的。
這裡再說一下c++程式在記憶體中的分布,主要有5個部分:
1、第乙個部分是棧,這裡的棧是用來儲存區域性變數。詳細的說一下,一般指的是呼叫方法或函式時儲存的相關變數,比如乙個遞迴程式,則在棧的記憶體中會儲存這三塊的內容,第一,返回位址,第二,實參的副本和這個實參的型別,第三,本次呼叫的臨時變數。這三部分壓入棧中,直到最底層的呼叫完成,則一層層的彈出資料。如果一直呼叫不能彈出資料的話則棧會溢位。
2、第二部分是堆,堆是程式設計師所能控制的記憶體,比如你new 了一塊記憶體,則會在堆中分配一塊區域。如果,你沒有用delete釋放這塊記憶體,則會一直存在,隨著程式的執行,則會造成記憶體溢位。記憶體溢位還有許多的問題,這裡可以延生到智慧型指標。
3、第三部分則是自由儲存區,當你使用malloc函式來分配記憶體時,則會分配到自由儲存區。
4、全域性/靜態儲存區:此記憶體區用來存放全域性變數和static定義的靜態資料成員或者函式,這一塊記憶體是供程式共享的一塊記憶體。
5、常量儲存區:用來存放常量,不允許更改。
內容參考:
下面再說一下,char* 和char的相同點
在作為函式引數的時候,char*和char他們是相同的。而且在函式作用域內,char b的b = = &b == &b[0]的。原因待分析。
型別轉換
string
char*
const char*
char
string
null
strcpy()
c_str()
copy()
char*
直接賦值
null
直接賦值
strncpy_s()
const char*
直接賦值
const_cast
null
strncpy_s()
char
直接賦值
直接賦值
直接賦值
null
ps:1、char*、const char*、char變成string,直接賦值;
2、char變成string、const char*、char*,直接賦值;
3、char變constchar容易,const char變char麻煩,使用(constchar*);
4、string變成char*,先通過c_str()變成const char型別,(const char*)將const char型別裝換為char型別。
5、string變成char,則需要利用迴圈挨個賦值,char*、const char*變成char則利用strncpy_s()賦值。
C 返回字串函式的四種實現方法
在討論著四種方法之前,首先要對函式有乙個簡單的認識,無論是在形實結合時,還是在return語句返回時,都有乙個拷貝的過程。你傳進來的引數是個值,自然函式在工作之前要把這個值拷貝乙份供自己使用,你傳進來的是個位址,函式也就會拷貝該位址供自己使用。同樣return返回時,如果返回乙個值,函式會將該值拷貝...
四種PHP定義字串的方式
閱讀目錄 1 簡介 在php中這門語言中,因為是弱型別語言,因此使用變數時不需提前定義即可使用。我們在使用php進行開發的時候,大多數使用雙引號 單引號進行定義字串。既然有這兩種方式,那麼他們之間肯定是有區別的。並且,除了單雙引號定義字串這兩種方式外,php還增加了heredoc和nowdoc這兩種...
PHP定義字串的四種方式
1 單引號 在單引號中,任何特殊字元都會按原樣輸出 除 和 將會被轉義輸出 僅僅只有單引號 反斜槓被轉義 2 雙引號 在雙引號中,遇到 將會解析該變數 雙引號中會轉義反斜槓的轉義字元 單雙引號之間的區別 雙引號會替換變數的值,而單引號會把它當做字串輸出。對於轉義的支援 效能速度問題,由於雙引號中的字...