Day_03 復(fù)合類型

1.利用cin、cin.get()cin.getline()輸入字符串的區(qū)別
iostream中的類cin提供了一些面向行的成員函數(shù):get()和getline()蚌讼。

  • cin
    cin使用空白(空格个榕、制表符和換行符)作為字符串的結(jié)束位置,這表明cin只能讀取輸入隊列中的一個單詞凰萨。
  • cin.getline()
    cin.getline()讀取整行械馆,使用enter鍵入的回車符確定讀取結(jié)束位置,該函數(shù)有兩個參數(shù)瘦材,第一個參數(shù)為用于存儲字符的數(shù)組仿畸,第二個參數(shù)為字符數(shù)組的長度。cin.getline()在讀取的字符數(shù)目達到第二個參數(shù)值時或者遇到換行符時停止讀取簿晓。丟棄換行符補充\0在字符串尾部千埃。
  • get()
    這個方法有幾種形式。討論其中兩種谒臼,第一種形式與getline()相似耀里,有兩個輸入?yún)?shù),都讀取到行尾底哥,但與getline()不同的是房官,這種方法不再讀取并丟棄換行符,而是將其留在隊列中孵奶。第二種形式無參蜡峰,讀取一個字符(即使是換行符),可以這種方式來處理換行符早像,為下一行輸入做準(zhǔn)備肖爵。

例:

const int strlen = 20;
char str1[strlen];
char str2[strlen];
    
cout << "input using cin:";
cin >> str1;
cin >> str2;
cout << "show the output using cin (string 1st):" << str1 << endl;
cout << "show the output using cin(string 2en):" << str2 << endl;
cin.get();//resolve enter
    
cout << endl;
cout << "input using getline():";
cin.getline(str1,strlen);
cout << "show the output using getline():" << str1 << endl;

cout << endl;
cout << "input using get():";
//execute cin.get(str1, strlen) will return a object,this obiect continue to execute get()
cin.get(str1, strlen).get();
cout << "show the output using get():" << str1 << endl;
運行結(jié)果

2.string類的操作
c++中string類的操作可以類比Java中string類的操作劝堪,

  • 初始化方式:
//use c type 
char ch1[] = { "hello" };
char ch2[] {"hello"};
//use c++ type
string str1 = { "hello" };
string str2{ "hello" };
string str3 = "hello";
  • 賦值、拼接和附加
//apend string to other string object
str4 = str1 + " world " + str2;
str4 += str3 + "  hi熬粗! ";
  • string類的其他操作
strcpy(str1,str2);//copy str2 to str1
strcat(str1,str2);//apending str2 to str1
strlen(str);//length of string object
  • getling()在兩種場合的使用
    char ch[20];
    string str;
    /*
    **此處余境,getline()為類istream中對象cin的成員方法灌诅,傳入的參數(shù)為字符串指針和字符的限制
    */
    cin.getline(ch,20);
    /*
    **此處含末,getline()為類istream的成員方法佣盒,傳入的參數(shù)為cin對象和string對象
    */
    getline(cin, str);
    cout << ch << endl;
  • 原始字符串
    原始字符串即表示字符本身,如\n就是\n盯仪,而不表示換行蜜葱。其表達式為:
//語法:strSelf = R“(string object)”
cout << R"(i am a man."\n" instead of endl)" << endl;
  • 結(jié)構(gòu)體struct
    定義
struct student {
        string name;
        int years;
        double heigh;
    };

初始化

struct student zhang;//c style 
student li;//c++ style
c++ style initialized student li
student li = { "dsds", 1994, 173.0 };
student li  { "dsds", 1994, 173.0 };
cout << li.name << endl << li.years << endl << li.heigh;
  • 結(jié)構(gòu)體中成員可以為類(如string),可以創(chuàng)建數(shù)組(類似基本數(shù)據(jù)類型數(shù)組的創(chuàng)建方法)
  • 共用體(union)
    共用體是一種數(shù)據(jù)格式,可以存儲不同的數(shù)據(jù)類型蚪燕。但只能同時存儲其中的一種類型奔浅。假如結(jié)構(gòu)體只能同時存儲intdouble,共用體則只能存儲一種鲁驶,intdouble舞骆。
    定義:
union num{
    int n;
    double m;
};

在不同的時間可以存儲不同類型的數(shù)據(jù),如:

num ID;
ID.n = 12;
//restore int and double in difference time
cout << ID.n << endl;
ID.m = 12.12;
cout << ID.m << endl;
  • 數(shù)組的替代品
    1.模板類vecter
    模板類vecter類似于string類脆霎,也是一種動態(tài)數(shù)組狈惫。可在運行階段設(shè)置vecter長度忆肾,可在末尾附加新數(shù)據(jù)菱肖,可在中間加入新數(shù)據(jù)〕≈伲可以說它是用new和delete來處理動態(tài)數(shù)組的替代品。創(chuàng)建一個名為vt的vecter對象且可存儲類型為typeName的定義方式為:
    vecter<typeName> vt(elem)
    2.1.模板類array
    vecter功能強大摹闽,但是效率低褐健。如果需要固定長度的數(shù)組澜汤。可以使用模板類array俊抵,array對象的長度是固定的徽诲。創(chuàng)建一個名為arr的array對象,它包含n_elem個類型為typeName的元素:
    vecter<typeName,n_elem> arr
  • new和delete
    使用指針時谎替,一定要首先對指針初始化钱贯,下述做法不可為:
//指針a指向何處,不得而知
    int *a;
    *a = 1;

c++引入了關(guān)鍵字來克服這種問題秩命,提供了一種可以繞過定義變量而直接通過指針操作數(shù)據(jù)的方法弃锐,即通過new關(guān)鍵字為指定類型的數(shù)據(jù)分配內(nèi)存(c中為molloc()函數(shù)),并提供一個指向該存儲單元的指針霹菊。其格式為:
typeName *pointerName = new typeName
例如:

//使用解引用(*)指針是浇辜,一定要對指針初始話
//使用new關(guān)鍵字尋求一個適合存儲int數(shù)據(jù)的內(nèi)存
int *p = new int;

值得注意的是,通過new關(guān)鍵字是從堆(heap)或自由空間(free store)中獲取存儲單元待诅;而直接定義的變量是從棧(stack)中獲取存儲單元熊镣。
new一定要和delete配合使用募书,使用delete可以釋放被定義是分配的存儲空間测蹲,但不會刪除指針本身。如:

int *p = new int;
delete p;

1.使用new創(chuàng)建動態(tài)數(shù)組
typeName *pointerName = new typeName[element_num]
使用delete刪除動態(tài)數(shù)組
delete [] pointerName
2.創(chuàng)建結(jié)構(gòu)體的兩種方式

struct infinite {
        int a;
        float b;
    };
//第一種初始化結(jié)構(gòu)體的方式篮赢,需要在定義時初始化
infinite first = {1,1.2};
infinite first { 1, 1.2 };
//訪問方式,利用操作符“.”訪問成員
int a = first.a;
float b = first.b;
//第2種動態(tài)初始化結(jié)構(gòu)體的方式启泣,不用在定義時初始化示辈,利用指針指向該存儲空間,操作符“->”訪問成員
infinite *second = new infinite;
second->a = 1;
second->b = 1.2;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纱耻,一起剝皮案震驚了整個濱河市险耀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌限次,老刑警劉巖柴灯,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赠群,死亡現(xiàn)場離奇詭異,居然都是意外死亡查描,警方通過查閱死者的電腦和手機冬三,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敌蚜,“玉大人窝爪,你說我怎么就攤上這事齐媒》柞耍” “怎么了贫奠?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刁品。 經(jīng)常有香客問我浩姥,道長状您,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任眯分,我火速辦了婚禮柒桑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飘诗。我一直安慰自己界逛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布溉潭。 她就那樣靜靜地躺著喳瓣,像睡著了一般赞别。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氯庆,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天扰付,我揣著相機與錄音,去河邊找鬼仁讨。 笑死羽莺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洞豁。 我是一名探鬼主播盐固,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丈挟!你這毒婦竟也來了刁卜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曙咽,失蹤者是張志新(化名)和其女友劉穎蛔趴,沒想到半個月后例朱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孝情,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年洒嗤,在試婚紗的時候發(fā)現(xiàn)自己被綠了箫荡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渔隶,死狀恐怖羔挡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情间唉,我是刑警寧澤绞灼,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站终吼,受9級特大地震影響镀赌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜际跪,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一商佛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姆打,春花似錦良姆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春痊剖,著一層夾襖步出監(jiān)牢的瞬間韩玩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工陆馁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留找颓,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓叮贩,卻偏偏與公主長得像击狮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子益老,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,518評論 1 51
  • 第一章 計算機與C++編程簡介 C++程序6個階段編程 ->預(yù)處理->編譯->連接->裝入->執(zhí)行1.程序在編譯器...
    rogertan30閱讀 3,844評論 0 1
  • C++運算符重載-下篇 本章內(nèi)容:1. 運算符重載的概述2. 重載算術(shù)運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 1,440評論 0 49
  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別彪蓬? C沒有Protection行為...
    阿面a閱讀 7,660評論 0 10
  • Tags:C++,《C++ Primer Plus》筆記 一捺萌、分類## 如下圖档冬,大概分為這些類型,每種類型的聲明語...
    傻沙閱讀 1,047評論 0 0