C艹復合型別(字串)

2021-09-07 13:23:13 字數 3071 閱讀 9737

在c艹中有兩種字串形式, 一種是c-風格, 另一種是c艹風格的

初始化:

char str[10] = ;

char str[20]=「aaa」;

string str = "

aaa";

#include #include 

int main(int argc, char

const *ar**)

#include strlen() 判斷字串的長度 與sizeof的區別

str.size() 屬於類方法, str屬於物件

string str2 = "panther";

str2.size()

int len2 = strlen(charr2); c-風格

確定字元數

std::cin.get(dessert, arsize).get

();

與std::cin.getline(dessert, arsize) 假設arsize為20, 則實際是取19個, 最後乙個為\

0的區別

get()函式的弊端:

cin.get(name, 20);

cin.get(dessert, 20);

由於第一次呼叫後, 換行符將留在輸入佇列中, 因此第二次呼叫時看到的第乙個字元便是換行符。因此get()認為已到達行尾, 因此不能獲取換行符。

幸運的是get() 有另一種變體, 使用不帶任何引數的cin.get()可以讀取下乙個字元(即換行符)

string庫里的strcat()就是追加的意思

通過strcat 得知 使用使用string而不是使用c字串的好處

例如:

char site[10] = "

house";

strcat(site,

"of pancakes

");

函式試圖將全部12個字元複製到陣列site裡, 這將覆蓋相鄰的記憶體, 可能導致程式終止,或者損壞資料。

string類具有自動調整大小的功能, 可以避免發生。

c裡面也有類似函式 strncat() 和strncpy() ,他們接受指出目標陣列最大允許長度的第三引數, 但增加寫程式的難度

string庫里的strcpy()就是複製的意思, 並建立新的記憶體位址 printf("%p\n", str1);

看指標不一樣,證明複製相當於重新建立乙個

看,我超過範圍了造成 溢位, 那麼str就不讓我輸入了

不知道有認真的人注意到了  getline(std::cin, str); 和std::cin.getline(charr, 20); 的區別了嗎

我們來分析一下

那麼來分析一下為什麼?

函式getline()是istream類的乙個方法, cin是istream乙個物件, 第乙個引數是目標陣列, 第二個引數是陣列長度, getline()使用它來避免越界溢位。

那麼:

getline(std::cin, str);
這個getline()不是類方法, 是將cin作為引數, 指出到**查詢輸入。另外沒有指出字串長度的引數, 因此string物件將根據字串的長度自動調整自己的大小

1. c艹還要其他型別字串, 比如wchar_t,  c艹11新增加的char16_t 和char32_t, 分別使用字首l、u、u來表示

wchar_t title = l"

chief astrogator";

char16_t name = u"

felonia ripova";

char32_t car = u"

humber super snipe

";

2. 還有一種支援unicode字串編碼的utf-8方案, 字元可能是1~4個八位組。方案是字首u8來表示這種型別。

3. 原始字元

在原始字元裡面, 字元表示的就是自己。例如\n 就是\n 不是換行符, 不需要使用\ 來轉義了

那麼怎麼使用呢?

cout << r"

( jim

"king"

tutt users

"\n"

instead of endl.)

"<< '

\n';

列印出來的是:

jim "king" tutt users "\n" instead of endl.

如果是標準字串怎麼寫:

cout << 「jim \

"king\"

tutt users \

"\\n\"

instead of endl.

"<< '

\n';

在輸入原始字串時候, 按回車鍵不僅會移到下一行, 還將在原始字串中新增回車字元。

在原始字串中包含」),編輯器遇見第乙個會結束嗎,會。但原始字串允許字串開頭的" 和 ( 加其他字元, 使用r「+*( ....)+*"。

例如:

cout << r"+*("(who would;t?)", she whispered.)+*" << endl;
也可以將字首r與其他字串字首結合使用。例如ru,ur等

複習C (四)復合型別 陣列和字串

陣列宣告時,應指出 1.儲存在每個元素中值的型別 2.陣列名 3.陣列中的元素數 一般不能是變數,下文將介紹如何打破這一限制 因為陣列是使用其他型別 int,char,float等 來建立的,所以它是一種復合型別。c 陣列從0開始編號。陣列的初始化 1.只有在定義陣列時才能初始化,不能將乙個陣列賦給...

復合格式字串

net framework 復合格式化功能使用物件列表和復合格式字串作為輸入。復合格式字串由固定文字和索引佔位符混和組成,其中索引佔位符稱為格式項,對應於列表中的物件。格式化操作產生的結果字串由原始固定文字和列表中物件的字串表示形式混和組成。復合格式字串和物件列表將用作支援復合格式化功能的方法的引數...

c 的復合格式字串(Format)

net framework 復合格式化功能使用物件列表和復合格式字串作為輸入。復合格式字串由固定文字和索引佔位符混和組成,其中索引佔位符稱為格式項,對應於列表中的物件。格式化操作產生的結果字串由原始固定文字和列表中物件的字串表示形式混和組成。諸如 format 等方法以及 writeline 和 t...