嵌入式學(xué)習(xí)(十一)

? ? ? ? 我們學(xué)習(xí)了單鏈表啤呼、雙向鏈表等數(shù)據(jù)存儲結(jié)構(gòu)议薪。經(jīng)過這些天的揣摩,事實告訴我們媳友,如果不是應(yīng)對考試斯议,不管什么什么鏈表,我們都可以采用數(shù)形結(jié)合的思維學(xué)習(xí)醇锚,構(gòu)建表哼御,以及對表進行增刪改查等操作。由于焊唬,嵌入式開始不需要太深的C基礎(chǔ)恋昼,這里就不再一一贅述。今天起開始學(xué)習(xí)C++赶促。

? ? ? ? 啥是C++液肌?無疑是比C 的plus更plus。換句話說鸥滨,它完美繼承了C的精髓嗦哆,同時又有了自己的獨特魅力。

? ??????1)C++是C語言的擴充婿滓,是屬于半面向過程半面向?qū)ο蟮木幊陶Z言老速,C語言的所有語法,C++均支持

????????2)C語言是完全面向過程語言凸主,C#是完全面向?qū)ο笳Z言

????????3)C++既可以實現(xiàn)面向過程的程序設(shè)計橘券,也可以實現(xiàn)面向?qū)ο蟮某绦蛟O(shè)計

????????4)C語言適合于小型的軟件開發(fā),對于大型的軟件就顯得力不從心了卿吐,所以旁舰,為了彌補這一缺陷,引入了面向?qū)ο蟮拈_發(fā)設(shè)計

? ? ? ? 補充說明:

? ? ? ? 1)啥是面向?qū)ο笪斯伲芏鄷隙冀榻B得很清楚箭窜。但我個人感覺就是,把某一事物的屬性和行為等打包起谨湘,成為一個物事绽快。術(shù)語叫做類芥丧。就好比電視紧阔。我們把電視的屬性、行為等打包起來续担,形成電視機類擅耽。然后提供遙控器等接口來操控電視機。這就是所謂的面向?qū)ο?/p>

????????2)C++是對C語言的擴充

????????C語言中的所有語法物遇,C++均可直接使用

????????C語言的編譯器乖仇,是gcc憾儒,而C++的編譯器是g++,C++的編譯器比C語言的編譯器要求更加嚴格

? ? ? ? 例如:

????????#include <iostream>

????????#include<string.h>? ? ? ? ? ? ? ? //如果不加該頭文件,則第會報錯

????????using namespace std;

????????int main()

????????{

? ? ????????printf("%d\n", strlen("hello"));

? ? ????????return 0;

? ? ? ? ? ?}

????3)C++文件的后綴名為:.cpp? ? .C? ? .cxx? ? .cc? ? .hpp

????4)C++中的頭文件乃沙,一般不以.h結(jié)尾起趾,如果使用C語言中的頭文件,可以將.h去掉警儒,前面加個c

????????????#include===>#include

????5)linux下編譯C++文件:g++ 文件名.cpp -o? 可執(zhí)行文件

????6)C++中的類所在的頭文件名就是類名

一训裆、第一個C++程序

1.1 hello world

????#include <iostream> ?//其實就類似C語言的頭文件

????using namespace std; ?//使用系統(tǒng)提供的標準命名空間,系統(tǒng)提供的所有的名字都是來自于該空間內(nèi)

????int main()? ? ? ? ? //主函數(shù)入口

????{

? ? ? ? ? ?cout << "hello world" << endl;

? ? ????????//cout:輸出流對象蜀铲,是來自于ostream的類對象边琉,用于輸出操作,相當于printf

? ? ????????//<<:插入運算符记劝,用于輸出槽使用

? ? ????????//后面是輸出內(nèi)容变姨,使用該類對象輸出時,無需給定格式控制符

? ? ????????//endl:結(jié)束一行厌丑,表示換行

? ????? cout<<"大家好"<<520<<endl<<3.14<<'G'<<endl;

? ? ????return 0;

????}

1.2 輸出流對象cout

1定欧。 該對象是來自于ostream的類對象,功能上類似于printf函數(shù)

2怒竿。 該類對象本質(zhì)上調(diào)用成員函數(shù)插入運算符重載函數(shù)

3忧额。 輸出數(shù)據(jù)時,無需使用格式控制符:%d愧口、%c睦番、%s。耍属。托嚣。,直接輸出即可

4厚骗。 換行使用endl

#include <iostream>

using namespace std;

int main()

{

? ? //cout << "Hello World!" << endl;

? ? cout.operator<<(1234);? ? ? ? ? ? ? ? //相當于調(diào)用運算符重載函數(shù)

? ? cout<<520<<endl;? ? ? ? ? ? ? //輸出整數(shù)

? ? cout<<3.24<<endl;? ? ? ? ? ? ? //輸出小數(shù)

? ? cout<<"hello"<<endl;? ? ? ? ? //輸出字符串

? ? cout<<'H'<<endl;? ? ? ? ? ? ? ? //輸出字符數(shù)據(jù)

? ? char ch = 'G';? ? ? ? ? ? ? //定義字符數(shù)據(jù)

? ? char *p = "hello world";? ? ? //定義字符指針示启,指向字符串

? ? int num = 1314;? ? ? ? ? ? //定義整形數(shù)據(jù)

? ? cout<<&num<<endl;? ? ? ? ? ? //整形變量的地址

? ? //cout<<&ch<<endl;? ? ? ? ? ? ? //輸出一該字符作為起始地址的字符串

? ? cout<<p<<endl;? ? ? ? ? ? ? ? //輸出字符串

? ? cout.operator<<(&ch);? ? ? ? //輸出字符變量的地址

? ? return 0;

}

練習(xí):使用cout完成輸出斐波那契前20項的內(nèi)容

1 1 2 3 5 8 13.。领舰。夫嗓。

#include <iostream>

using namespace std;

int main()

{

? ? int a = 1;

? ? int b = 0;

? ? int sum = 1;

? ? int arr[20] = {0};

? ? for(int i=0; i<20; i++)

? ? {

? ? ? ? arr[i] = sum;? ? ? ? ? //存放最新值

? ? ? ? sum = a+b;? ? ? ? ? //更新sum

? ? ? ? b = a;? ? ? ? ? ? ? //迭代舊值

? ? ? ? a = sum;

? ? }

? ? //循環(huán)輸出數(shù)組元素

? ? for(int i=0; i<20; i++)

? ? {

? ? ? ? cout<<arr[i]<<" ";

? ? }

? ? return 0;

}

1.3 輸入流對象cin

1。 cin是來自于istream的類對象冲秽,用于輸入工作舍咖,功能上類似于scanf

2。 該類對象輸入時锉桑,也無需使用格式控制符

3排霉。輸入時,一般也不加endl

#include <iostream>

using namespace std;

int main()

{

? ? int num;

? ? cout<<"請輸入num的值";

? ? cin >> num;? ? ? ? ? ? ? ? ? //輸入整形變量

? ? double key;

? ? cout<<"請輸入key的值:";

? ? cin>>key;? ? ? ? ? ? ? ? ? ? ? ? //輸入小數(shù)

? ? char ch;

? ? cout<<"請輸入一個字符:";

? ? cin>>ch;? ? ? ? ? ? ? ? ? ? ? ? //輸出字符數(shù)據(jù)

? ? cout<<"num = "<<num<<"? key = "<<key<<"? ch = "<<ch<<endl;

? ? return 0;

}

練習(xí):提示并輸入一個字符民轴,判斷該字符值攻柠,如果是大寫字母球订,轉(zhuǎn)變成小寫字母輸出,如果是小寫字母轉(zhuǎn)變成大寫字母輸出瑰钮,如果是數(shù)字字符冒滩,輸出對應(yīng)的整數(shù)數(shù)字,如果是其他字符浪谴,則輸出‘*’旦部;

#include <iostream>

using namespace std;

int main()

{

? ? char i;

? ? cout<<"請輸入一個字符:";

? ?cin>>i;

? ? if(i>'a'&&i<'z')? ? ? ? //判斷是否為小寫字母

? ? {

? ? ? ? ? ? ? i-=32;

? ? ? ? cout<<i<<endl;

? ? }

? ? else if(i>'A'&&i<'Z')? ? ? ? ? ? //判斷是否為大寫字母

? ? {

? ? ? ? i+=32;

? ? ? ? cout<<i<<endl;

? ? }

? ? else if(i>'0'&&i<='9')

? ? {

? ? ? ? int b=i-'0';? ? ? ? ? ? ? //將數(shù)字字符轉(zhuǎn)換為整數(shù)

? ? ? ? cout<<b<<endl;

? ? }

? ? else

? ? {

? ? ? ? i='*';

? ? ? ? cout<<i;

? ? }

? ? return 0;

}

1.4 cout的格式化輸出

1。 對于部分關(guān)鍵字而言较店,可以不加指定的頭文件

2士八。如果使用的系統(tǒng)提供的函數(shù),需要加上對應(yīng)的頭文件:#include

#include <iostream>

#include<iomanip>

using namespace std;

int main()

{

? ? int num = 101;

? ? //使用關(guān)鍵字設(shè)置輸出進制數(shù)據(jù)

? ? cout<<"num = "<<num<<endl;? ? ? ? ? ? ? //101? 默認輸出10進制數(shù)據(jù)

? ? cout<<oct<<"num = "<<num<<endl;? ? ? ? ? //145? 輸出八進制 數(shù)據(jù)

? ? cout<<"num = "<<num<<endl;? ? ? ? ? ? ? //使用的是上一次改變后的進制數(shù)據(jù)

? ? cout<<hex<<"num = "<<num<<endl;? ? ? ? ? //65? ? 輸出16進制 數(shù)據(jù)

? ? cout<<dec<<"num = "<<num<<endl;? ? ? ? ? //101

? ? //使用函數(shù)設(shè)置輸出進制數(shù)據(jù)? 類似printf("%#x", 101);

? ??cout<<setbase(8)<<num<<endl; //145 設(shè)置8進制數(shù)據(jù)

? ? cout<<"num = "<<num<<endl;? ? ? ? ? ? ? //145

? ? cout<<setbase(16)<<num<<endl;? ? ? ? ? //輸出16進制數(shù)據(jù)

? ? cout<<setbase(10)<<num<<endl;? ? ? ? ? //輸出10進制數(shù)據(jù)

? ? cout<<"***************************************\n";

? ? //設(shè)置寬度梁呈,類似于printf("%-05d", 101);

? ? cout<<setw(5)<<num<<endl;? ? ? ? ? ? //設(shè)置寬度

? ? cout<<setw(5)<<setfill('*')<<num<<endl;? ? ? // 設(shè)置填充字符

? ? cout<<setw(5)<<setfill('*')<<left<<num<<endl;? ? //設(shè)置左對齊

? ? cout<<"***************************************\n";

? ? //輸出小數(shù):printf("%.2f", 3.1415926);

? ? double key = 3.14159265358;

? ? cout<<"key = "<<key<<endl;? ? ? ? ? ? ? ? ? ? ? //默認保留6為 有效數(shù)字

? ? cout<<"key = "<<setprecision(3)<<key<<endl;? ? ? //設(shè)置 保留3個有效數(shù)字

? ? cout<<"key = "<<setprecision(2)<<fixed<<key<<endl;? //fixed與setprecision共同作用時婚度,2表示的是保留小數(shù)的個數(shù)

? ? return 0;

}

運行結(jié)果

二、命名空間

2.1 C++中接觸到的名字有哪些

????????變量名官卡、數(shù)組名蝗茁、指針名、函數(shù)名寻咒、結(jié)構(gòu)體變量名哮翘、共用體變量名、函數(shù)指針名毛秘、枚舉名饭寺。。叫挟。艰匙。

2.2 命名空間的作用

1)主要作用是解決多人協(xié)同開發(fā)程序時名字污染(名字沖突)問題

2)所謂命名空間,其實相當于給名字加個“姓氏”

2.3 std命名空間的使用

1)命名空間必須先定義抹恳,后使用

2)當引入系統(tǒng)提供的頭文件時员凝,如果該頭文件提供某些名字,那么一定時定義在一個統(tǒng)一的命名空間中奋献,名為std

3)命名空間使用方式1:在使用該命名空間中的名字時健霹,直接加上命名空間名和作用域限定符,指名道姓的使用某個名字

例如:std::cout<<"hello ";

? ? ? ?命名空間使用方式2:提前將某個命名空間中的某個名字使用關(guān)鍵字using進行聲明瓶蚂,后期對該名字就可以直接使用了糖埋,但是,該命名空間中沒有提前聲明的名字扬跋,不能直接使用

例如:using std::cout;

????????????cout<<"hello world"阶捆;

????????命名空間的使用方式3:提前將整個命名空間進行聲明,使用關(guān)鍵字 using namespace 命名空間名钦听,聲明后洒试,該命名空間中的名字,就可以直接使用了朴上,無需再加命名空間名和作用域限定符了

#include <iostream>

//命名空間的使用方式2:將命名空間中的某個名字進行聲明

using std::cout;? ? ? ? ? //將cout這個名字進行聲明

//命名空間的使用方式3:將整個命名空間進行聲明

using namespace std;

int main()

{

? ? std::cout << "Hello World!" << std::endl; ?//使用方式1垒棋,連同命名空間名和作用域限定符一起使用

? ? cout<<"nihao"<<std::endl; ? //使用方式2的案例:由于名字已經(jīng)提前聲明,直接用即可,對于沒有提前聲明的名字痪宰,不能直接使用

? ? cout << "Hello World!" << endl; ?//使用方式3:整個命名空間進行聲明了叼架,命名空間中的名字直接使用即可

? ? return 0;

}

2.4 自命名空間

定義格式:

? ??namespace 命名空間名

? ??{

? ??? ??類型1? 名字1;

? ??? ??類型2? 名字2衣撬;

? ??? ??乖订。。具练。

? ??? ??類型n? 名字n乍构;

? ??}

例如:

#include <iostream>

#include<cstring>

using namespace std;

//自定義命名空間

namespace zpp

{

? ? char name[20];? ? ? ? //姓名

? ? int age;? ? ? ? ? ? //年齡

? ? double? score;? ? ? ? //分數(shù)

? ? void show();? ? ? ? ? ? ? ? //命名空間內(nèi)聲明一個函數(shù)

}

//對命名空間中的函數(shù)進行定義,定義時,需要在名字前加命名空間名和作用域限定符

void zpp::show()

{

? ? cout<<"name = "<<name<<endl;

? ? cout<<"age = "<<age<<endl;

? ? cout<<"score = "<<score<<endl;

}

//將命名空間中的某個名字提前聲明

using zpp::name;

//將整個命名空間全部聲明

using namespace zpp;

int main()

{

? ? zpp::age = 20;? ? ? ? ? ? ? ? //命名空間使用方式1

? ? strcpy(name, "zhangpengpeng");? //命名空間使用方式2

? ? score = 100;? ? ? ? ? ? ? ? ? ? //命名空間使用方式3

? ? show();? ? ? ? ? ? ? ? ? ? ? //由于整個命名空間全部聲明了扛点,所以命名空間中的所有名字可以直接使用

? ? return 0;

}

運行結(jié)果:

2.5 命名空間沖突問題

1) 不同的命名空間之間名字沖突問題哥遮,需要在產(chǎn)生沖突的名字前加命名空間名和作用域限定符解決

2) 命名空間中的名字與全局名稱沖突問題,如果使用命名空間中的名字陵究,需要加上命名空間名和作用域限定符眠饮,如果想要使用全局的名字,全局的名字默認放入匿名空間中铜邮,使用時只需要加上命名作用域限定符即可

3) 命名空間中的名字與局部名字沖突仪召,優(yōu)先使用局部的名字,如果非要使用命名空間中的名字松蒜,則需要加上命名空間名和作用域限定符

#include <iostream>

#include<cstring>

using namespace std;

//聲明一個命名空間

namespace zpp

{

? ? int num;

? ? double key;

? ? char name[20];

? ? void show(){}

}

//再聲明一個命名空間

namespace gqq

{

? ? int num;

}

//使用命名空間

using namespace zpp;

using namespace gqq;

//定義一個全局變量

double key;

int main()

{

? ? //沖突方式1:不同命名空間之間名字沖突

? ? zpp::num = 520;? ? ? ? //對zpp命名空間中的num進行使用

? ? gqq::num = 1314;? ? ? ? ? //對gqq命名空間中的num進行使用

? ? //沖突方式2:命名空間中的的名字與全局名字沖突

? ? zpp::key = 3.14;? ? ? ? ? //對zpp命名空間中的key進行使用

? ? ::key = 2.48;? ? ? ? ? ? ? //對全局變量中的key進行使用

? ? //沖突方式3:命名空間中的名字與局部名字相同時

? ? char name[20];

? ? strcpy(name, "zhangsan");? ? ? ? ? //此時使用的是局部變量中的name

? ? cout<<"name = "<<name<<"? zpp::name = "<<zpp::name<<endl;

? ? return 0;

}

2.6 命名空間使用的注意事項

1) 一個命名空間中可以嵌套定義一個命名空間返咱,使用名字時,需要用作用域限定符一級一級找到最低一級進行使用

2) 同一作用域下牍鞠,可以定義多個同名的命名空間咖摹,編譯時會將這對個同名的命名空間合成一個,所以难述,定義時萤晴,不允許出現(xiàn)名字有相同的現(xiàn)象

#include <iostream>

using namespace std;

namespace zpp {

? ? int num = 520;

? ? //命名空間中嵌套定義一個命名空間

? ? namespace gqq {

? ? ? ? int age;

? ? ? ? int num = 1314;

? ? }

}

//同一作用域下可以定義多個同名的命名空間

namespace zpp {

? ? //double num;? ? ? ? ? //但是,命名空間中的名字不能重復(fù)

? ? //void num();

? ? char name[20];

}

int main()

{

? ? cout << zpp::num << endl;? ? ? ? ? //520

? ? cout << zpp::gqq::num << endl;? ? ? //1314? ? 使用命名空間名和作用域限定符一級一級往下找

? ? return 0

}

三胁后、C++中的字符串(string)

3.1 C++中支持兩種風格的字符串

1) C語言風格的字符串依然支持店读,特點是有一個'\0'作為字符串結(jié)束標志,對于字符串的操作攀芯,通常基于字符數(shù)組來完成

2) C++風格的字符串殖演,本質(zhì)上是一個string類的類對象

2.2 string類型的使用

1) 單個字符串變量的初始化和賦值

? ? //定義一個字符串類型

? ? string s1;? ? ? ? ? //此時定義一個字符串變量

? ? cout<<"s1 = "<<s1<<endl;? ? ? //空串

? ? s1 = "hello world";? ? ? ? ? //給字符串變量賦值,相當于C語言的strcpy

? ? cout<<"s1 = "<<s1<<endl;? ? //hello world

? ? //定義一個字符串并直接 初始化

? ? string s2 = "ni hao";

? ? cout<<"s2 = "<<s2<<endl;? ? ? ? ? ? ? //ni hao

? ? //定義一個字符串并初始化

? ? string s3("I love China");

? ? cout<<"s3 = "<<s3<<endl;? ? ? ? ? ? //I love China

? ? //定義 一個字符串變量并初始化

? ? string s4(5,'A');

? ? cout<<"s4 = "<<s4<<endl;? ? ? ? ? ? ? //AAAAA

? ? //定義一個 字符串并初始化

? ? string s6{"good good study"};

? ? cout<<"s6 = "<<s6<<endl;? ? ? ? ? ? ? ? ? //good good study

2) 多個變量的初始化和賦值

? ? //使用一個字符串給另一個字符串變量初始化

? ? string s7 = s1;

? ? cout<<"s7 = "<<s7<<endl;? ? ? ? ? ? ? ? //hello world

? ? //使用一個字符串給另一個字符串初始化

? ? string s8(s2);

? ? cout<<"s8 = "<<s8<<endl;? ? ? ? ? ? ? ? ? //ni hao

? ? // 使用一個字符串給另一個字符串賦值

? ? s8 = s3;

? ? cout<<"s8 = "<<s8<<endl;? ? ? ? ? ? //I love China

? ? //使用一個字符串連接另一個字符串后賦值給一個新字符串

? ? string s9 = s1 + s3;? ? ? ? ? ? ? ? ? //相當于strcat

? ? cout<<"s9 = "<<s9<<endl;

? ? s9 = s1 + "lalalallalal";? ? ? ? ? ? ? ? //一個字符串變量加上一個字符串常量

? ? cout<<"s9 = "<<s9<<endl;

? ? s9 = "dudududuudu"+s1;? ? ? ? ? ? ? ? ? //一個字符串常量加上一個字符串變量

? ? cout<<"s9 = "<<s9<<endl;

案例

#include <iostream>

using namespace std;

int main()

{

? ? //定義一個字符串類型

? ? string s1;? ? ? ? ? //此時定義一個字符串變量

? ? cout<<"s1 = "<<s1<<endl;? ? ? //空串

? ? s1 = "hello world";? ? ? ? ? //給字符串變量賦值丸相,相當于C語言的strcpy

? ? cout<<"s1 = "<<s1<<endl;? ? //hello world

? ? //定義一個字符串并直接 初始化

? ? string s2 = "ni hao";

? ? cout<<"s2 = "<<s2<<endl;? ? ? ? ? ? ? //ni hao

? ? //定義一個字符串并初始化

? ? string s3("I love China");

? ? cout<<"s3 = "<<s3<<endl;? ? ? ? ? ? //I love China

? ? //定義 一個字符串變量并初始化

? ? string s4(5,'A');

? ? cout<<"s4 = "<<s4<<endl;? ? ? ? ? ? ? //AAAAA

? ? //定義一個 字符串并初始化

? ? string s6{"good good study"};

? ? cout<<"s6 = "<<s6<<endl;? ? ? ? ? ? ? ? ? //good good study

? ? cout<<"**************************************************"<<endl;

? ? //使用一個字符串給另一個字符串變量初始化

? ? string s7 = s1;

? ? cout<<"s7 = "<<s7<<endl;? ? ? ? ? ? ? ? //hello world

? ? //使用一個字符串給另一個字符串初始化

? ? string s8(s2);

? ? cout<<"s8 = "<<s8<<endl;? ? ? ? ? ? ? ? ? //ni hao

? ? // 使用一個字符串給另一個字符串賦值

? ? s8 = s3;

? ? cout<<"s8 = "<<s8<<endl;? ? ? ? ? ? //I love China

? ? //使用一個字符串連接另一個字符串后賦值給一個新字符串

? ? string s9 = s1 + s3;? ? ? ? ? ? ? ? ? //相當于strcat

? ? cout<<"s9 = "<<s9<<endl;

? ? s9 = s1 + "lalalallalal";? ? ? ? ? ? ? ? //一個字符串變量加上一個字符串常量

? ? cout<<"s9 = "<<s9<<endl;

? ? s9 = "dudududuudu"+s1;? ? ? ? ? ? ? ? ? //一個字符串常量加上一個字符串變量

? ? cout<<"s9 = "<<s9<<endl;

? ? //s9 = "didididii"+"dadadadada";? ? ? ? ? //不允許操作

? ? return 0;

}

3.3 C風格字符串與C++風格字符串互相轉(zhuǎn)換

1) C語言風格的字符串可以無條件轉(zhuǎn)換為C++風格字符串

2) C++風格字符串向C語言風格字符串轉(zhuǎn)換時灭忠,需要調(diào)用其成員函數(shù)c_str()或者data()

#include <iostream>

#include<cstring>

using namespace std;

int main()

{

? ? char s1[20];

? ? string s2 = "hello";? ? ? ? ?

? ? //s2 = s1;? ? ? ? ? //C語言風格向c++風格字符串轉(zhuǎn)換

? ? //s1 = s2;? ? ? ? ? ? ? //C++風格字符串不能直接轉(zhuǎn)換為C風格字符串

? ? //strcpy(s1, s2.c_str());

? ? strcpy(s1, s2.data());

? ? cout<<"s1 = "<<s1<<endl;? ? ? ? //hello

? ? return 0;

}

3.4 字符串的比較

1) C語言風格的字符串比較需要使用strcmp來完成

2) C++風格的字符串比較弛作,不需要使用strcmp函數(shù)华匾,直接使用關(guān)系運算符即可

#include <iostream>

#include<cstring>

using namespace std;

int main()

{

? ? char s1[20];

? ? string s2 = "hello";

? ? //s2 = s1;? ? ? ? ? //C語言風格向c++風格字符串轉(zhuǎn)換

? ? //s1 = s2;? ? ? ? ? ? ? //C++風格字符串不能直接轉(zhuǎn)換為C風格字符串

? ? //strcpy(s1, s2.c_str());

? ? strcpy(s1, s2.data());

? ? cout<<"s1 = "<<s1<<endl;? ? ? ? //hello

? ? string s3 = "world";

? ? if(s2 > s3)? ? ? ? ? ? ? ? //字符串的比較可以直接使用關(guān)系運算符來完成

? ? {

? ? ? ? cout<<"s2大"<<endl;

? ? }else if(s2 < s3)

? ? {

? ? ? ? cout<<"s3大"<<endl;

? ? }else if(s2 == s3)

? ? {

? ? ? ? cout<<"一樣大"<<endl;

? ? }

? ? return 0;

}

3.5 C++風格字符串的常用函數(shù)

1) size()瘦真、length() :該函數(shù)返回字符串的實際長度刊头,不包含'\0'

2) empty():? ? 判斷該字符串是否為空,如果為空串诸尽,則返回真原杂,否則返回假

3) clear():將字符串中的內(nèi)容清空

4) at():返回字符串中給定位置的字符

#include <iostream>

using namespace std;

int main()

{

? ? string s1;

? ? //求字符串實際長度

? ? cout<<"size of s1 = "<<s1.size()<<endl;

? ? cout<<"size of s1 = "<<s1.length()<<endl;

? ? //判斷字符串 是否為空

? ? if(s1.empty())

? ? {

? ? ? ? cout<<"字符串為空"<<endl;

? ? }else

? ? {

? ? ? ? cout<<"字符串非空"<<endl;

? ? }

? ? s1 = "good good study day day up";? ? //給字符串賦值

? ? cout<<"size of s1 = "<<s1.size()<<endl;

? ? //判斷字符串 是否為空

? ? if(s1.empty())

? ? {

? ? ? ? cout<<"字符串為空"<<endl;

? ? }else

? ? {

? ? ? ? cout<<"字符串非空"<<endl;

? ? }

? ? // 調(diào)用函數(shù)清空字符串中內(nèi)容

? ? s1.clear();

? ? cout<<"size of s1 = "<<s1.size()<<endl;

? ? //判斷字符串 是否為空

? ? if(s1.empty())

? ? {

? ? ? ? cout<<"字符串為空"<<endl;

? ? }else

? ? {

? ? ? ? cout<<"字符串非空"<<endl;

? ? }

? ? cout<<"*************************************"<<endl;

? ? string s2 = "hello world";

? ? s2.at(0) = 'H';? ? ? ? ? ? ? //訪問字符串中的元素,有數(shù)組下標越界檢測您机,當越界后穿肄,拋出異常

? ? cout<<"s2 = "<<s2<<endl;

? ? s2[6] = 'W';? ? ? ? ? ? ? ? ? ? //通過下標訪問字符串中的元素,無越界檢測

? ? cout<<"s2 = "<<s2<<endl;

? ? return 0;

}

3.6 字符串的輸入輸出

1) 如果字符串中沒有回車际看、空格咸产、tab鍵,則可以直接使用cin完成

2) 如果有空格的輸入仲闽,需要使用全局函數(shù)getline來完成

#include <iostream>

using namespace std;

int main()

{

? ? string s1;

? ? cout<<"請輸入一個字符串:";

? ? //cin>>s1;? ? ? ? ? //該輸入不能輸入空格

? ? getline(cin, s1);? ? ? ? ? ? //可以輸入空格

? ? //參數(shù)1:輸入流對象

? ? //參數(shù)2:輸入后字符串的容器

? ? cout<<"s1 = "<<s1<<endl;

? ? return 0;

}

練習(xí):提示并輸入一個字符串脑溢,統(tǒng)計該字符串中的大小字母個數(shù)、小寫字母個數(shù)赖欣、數(shù)字個數(shù)屑彻、空格個數(shù)、其他字符個數(shù)并輸出

#include <iostream>

using namespace std;

int main()

{

? ? string s1;

? ? cout<<"請輸入一個字符串:";

? ? getline(cin,s1);

? ? cout<<"s1="<<s1.size()<<endl;

? ? unsigned int i;

? ? int count1=0,count2=0,count3=0,count4=0,count5=0;

? ? for( i=0;i<s1.size();i++)

? ? {

? ? ? ? if(s1.at(i)==' ')

? ? ? ? {

? ? ? ? ? ? count1++;? ? ? ? ? //空格個數(shù)累計

? ? ? ? }else if(s1.at(i)>='A'&&s1.at(i)<='Z')

? ? ? ? {

? ? ? ? ? ? count2++;? ? ? //累計大寫字母

? ? ? ? }else if(s1.at(i)>='a'&&s1.at(i)<='z')

? ? ? ? {

? ? ? ? ? ? count3++;? ? ? ? ? ? ? //累計小寫字母

? ? ? ? }else if(s1.at(i)>='0'&&s1.at(i)<='9')

? ? ? ? {

? ? ? ? ? ? count4++;? ? ? ? //累計數(shù)字字符

? ? ? ? }else

? ? ? ? {

? ? ? ? ? ? count5++;? ? ? ? ? ? //累計其他字符

? ? ? ? }

? ? }

? ? cout<<"空格個數(shù):"<<count1<<endl;

? ? cout<<"大寫字母個數(shù):"<<count2<<endl;

? ? cout<<"小寫字母個數(shù):"<<count3<<endl;

? ? cout<<"數(shù)字個數(shù):"<<count4<<endl;

? ? cout<<"其他字符個數(shù):"<<count5<<endl;

? ? return 0;

}

四顶吮、bool類型

1) C語言中不支持bool類型社牲,但是C++中支持bool類型

2) bool類型的值只有兩個:true(非0數(shù)字)、false(0),這兩個關(guān)鍵字悴了,用于bool類型的真和假

3) bool類型的數(shù)據(jù)搏恤,默認使用數(shù)字表示真假违寿,如果非要使用單詞表示,則需要使用關(guān)鍵字boolalpha來調(diào)整

轉(zhuǎn)化后熟空,就一直使用單詞表示,如果還想繼續(xù)使用數(shù)字菌瘪,則需要使用關(guān)鍵字noboolalpha調(diào)整

4) bool類型的變量所占內(nèi)存1字節(jié)阱当,本質(zhì)上只需要1bit即可弊添,但是油坝,內(nèi)存分配的基本單位是字節(jié)

#include <iostream>

using namespace std;

int main()

{

? ? bool b1 = 10;

? ? cout<<"b1 = "<<b1<<endl;? ? ? ? ? //1

? ? bool b2 = -10;

? ? cout<<"b2 = "<<b2<<endl;? ? ? ? ? ? //1

? ? bool b3 = 0;

? ? cout<<"b3 = "<<b3<<endl;? ? ? ? ? ? //0

? ? bool b4 = true;

? ? cout<<"b4 = "<<b4<<endl;? ? ? ? ? ? //1

? ? bool b5 = false;

? ? cout<<"b5 = "<<b5<<endl;? ? ? ? ? ? //0

? ? cout<<"**************************************"<<endl;

? ? cout<<"b1 = "<<boolalpha<<b1<<endl;? ? ? //true

? ? cout<<"b2 = "<<b2<<endl;? ? ? ? ? ? ? ? //true

? ? cout<<"b3 = "<<b3<<endl;? ? ? ? ? ? ? ? //false

? ? cout<<"**************************************"<<endl;

? ? cout<<"b4 = "<<noboolalpha<<b4<<endl;? ? //1

? ? cout<<"b5 = "<<b5<<endl;? ? ? ? ? ? ? ? //0

? ? cout<<"size of bool = "<<sizeof (bool)<<endl;? ? ? ? //1

? ? return 0;

}

個人感覺:

1)C與C++是親戚帆啃。C++繼承了C的優(yōu)點努潘,并發(fā)展了自己的個性“類”报慕。所謂的類眠冈,就像是把一些有關(guān)的事物性質(zhì)方法打包起來蜗顽,并提供用法(術(shù)語端口)

2)由于C++有“類”的概念诫舅,那里面的屬性刊懈、方法什么都有比較強的歸屬感匾浪。比如倘是,a)要使用函數(shù)混稽,就要聲名是誰個空間的退腥;b)調(diào)用屬性苗胀、方法也得有歸屬感基协。string sss= "fdsafdsafdsa fwq4t4231t" ; cout<<sss.length();

3) ?string, 在C語言中就比較特殊;在C++中更加特殊刨疼。必須掌握它的特殊用法

4)bool , 在C語言中沒有亭畜;在C++中有

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拴鸵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子聘芜,更是在濱河造成了極大的恐慌汰现,老刑警劉巖瞎饲,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妄田,死亡現(xiàn)場離奇詭異疟呐,居然都是意外死亡萨醒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門旨椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勤庐,你說我怎么就攤上這事米罚÷荚瘢” “怎么了隘竭?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菱皆。 經(jīng)常有香客問我,道長霹期,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任吭产,我火速辦了婚禮臣淤,結(jié)果婚禮上邑蒋,老公的妹妹穿的比我還像新娘。我一直安慰自己逮京,他們只是感情好草描,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布穗慕。 她就那樣靜靜地躺著,像睡著了一般栗竖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上添吗,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天妓美,我揣著相機與錄音壶栋,去河邊找鬼贵试。 笑死毙玻,一個胖子當著我的面吹牛桑滩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戳吝,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塘雳!你這毒婦竟也來了败明?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤讳嘱,失蹤者是張志新(化名)和其女友劉穎沥潭,沒想到半個月后钝鸽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體因谎,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蓝角,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了患朱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裁厅。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖唠梨,靈堂內(nèi)的尸體忽然破棺而出茬故,到底是詐尸還是另有隱情磺芭,我是刑警寧澤钾腺,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站坞琴,受9級特大地震影響寒亥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褂傀,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一仙辟、第九天 我趴在偏房一處隱蔽的房頂上張望叠国。 院中可真熱鬧粟焊,春花似錦项棠、人聲如沸香追。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岖圈。三九已至蜂科,卻和暖如春导匣,著一層夾襖步出監(jiān)牢的瞬間贡定,已是汗流浹背蚓耽。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工步悠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鼎兽,地道東北人谚咬。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像背苦,于是被迫代替她去往敵國和親秕噪。 傳聞我的和親對象是個殘疾皇子厚宰,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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