日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++复习总结回顾】—— 【一】基础知识+字符串/string类

發布時間:2023/12/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++复习总结回顾】—— 【一】基础知识+字符串/string类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、面向對象/過程
    • 1. 面向過程過程
    • 2. 面向對象編程
  • 二、C++語言基礎
    • 1. 信息的存儲單位
    • 2. 命名空間
    • 3. 基本數據類型 + 字符串
      • C++的基本數據類型
      • 字符串處理
    • 4. string 類詳解
      • 4.1 string類的初始化
      • 4.2 string 的賦值和連接
        • 賦值
        • 連接
      • 4.3 常用方法
        • 長度 length() / size()
        • 子串 substr()
        • 尋找字符 find()
        • 消除 erase()
        • 替換 replace()
        • 插入 insert()
        • 轉換成C語言形式char*字符串 c_str()
    • 5. 運算
      • 逗號運算
      • 邏輯運算
      • 位運算
      • sizeof 運算
    • 6. 類型轉換
      • 隱含類型轉換
      • 顯示類型轉換
  • 三、算法的基本控制結構
  • 四、enum 枚舉類型


一、面向對象/過程

1. 面向過程過程

優點:
有效地將一個較復雜的程序系統設計任務分解成許多易于控制和處理的子任務,便于開發和維護

缺點:

  • 可重用性差、數據安全性差、難以開發圖形界面的應用
  • 把數據和處理數據的過程分離為相互獨立的實體。
  • 當數據結構改變時,所有相關的處理過程都要進行相應的修改。
  • 每一種相對于老問題的新方法都要帶來額外的開銷。
  • 圖形用戶界面的應用,很難用過程來描述和實現,開發和維護都很困難。

2. 面向對象編程

面向對象的基本概念

  • 對象
  • 抽象與分類
  • 封裝
  • 繼承
  • 多態

優點:

  • 程序模塊間的關系更為簡單,程序模塊的獨立性、數據的安全性就有了良好的保障。
  • 通過繼承與多態性,可以大大提高程序的可重用性,使得軟件的開發和維護都更為方便。

二、C++語言基礎

1. 信息的存儲單位

2. 命名空間


若沒有using namespace std 則: cout << 改為 std :: cout <<

3. 基本數據類型 + 字符串

C++的基本數據類型

  • bool
  • char(字符類型)
  • int
  • float
  • double

注: 基本數據類型中沒有字符串類型(string)

一對 “ ” 括起來的字符序列表示 字符串(在末尾添加’\0’作為結尾標記),
‘ ' 括起來的表示 單個字符

字符串處理

C++基本數據類型中沒有字符串變量,存儲和處理方法有兩種如下:

  • 用字符數組來存放字符串;(C風格字符串)

  • 標準C++庫預定義 string 類

  • 4. string 類詳解

    string類是一個模板類,它的定義如下:
    typedef basic_string<char> string

    4.1 string類的初始化

    ? string s1("Hello"); //一個參數的構造函數,用Hello初始化
    ? sting s2(5,'x'); //兩個參數的構造函數,5代表x出現的次數
    ? string month = "March";

    不提供以字符和整數為參數的構造函數

    • string error1 = 'c'; //error
    • string error2 = ('u'); //error
    • string error3 = 22; //error
    • string error4(8); //error

    可以將字符賦值給string對象

    string s; s = 'n';

    4.2 string 的賦值和連接

    賦值

    • 用 = 賦值
    string s1("cat"), s2; s2 = s1;
    • 用 assign 成員函數復制
    string s1("cat"),s2; s2.assign(s1); //s1賦值給s2
    • 用assign成員函數部分復制
    string s1("cat"),s2; s2.assign(s1,1,3); //從s1的下標為1的字符開始復制3個字符給s2
    • 單個字符復制
    s2[4] = s1[3];
    • 使用 at 成員函數逐個訪問 string 對象中的字符
    string s1 = "hello"; for(int i = 0; i<s1.length();i++)cout<< s1.at(i) <<endl;

    注:成員函數at會做下標范圍檢查,若果超出范圍會拋出out_of_range異常,而下標運算符不做范圍檢查

    連接

    • 用 + 連接字符串
    string s1("good"),s2("morning!"); s1 += s2; cout<<s1;
    • 用成員函數 append 連接
    s1.append(s2); s2.append(s1,3,s1.size()); //s1.size() s1的字符數 //從s1的下標3開始,連接s1.size()個的字符 //若字符串內沒有足夠字符,則復制到s1的末尾就停止

    4.3 常用方法

    長度 length() / size()

    構造的string太長無法表達 -> 會拋出 length error 異常
    s.length() / s.size()

    子串 substr()

    成員函數 substr()

    s2 = s1.substr(3,2); //下標3開始2個字符

    尋找字符 find()

    • 成員函數 find()
    s1.find("lo"); //從s1中從前往后找lo第一次出現的位置,返回l所在的位置下標 //若沒有找到,返回string::npos(string中定義的靜態常量) s1.rfind("lo"); //從后往前查找,返回l的位置 s1.find("a",2); //從下標2開始查找“a"
    • 成員函數 find_first_of()
      查找字符第一次出現的下標

    • 成員函數 find_last_of()
      查找字符最后一次出現的地方

    消除 erase()

    s1.erase(3); //返回 消除下標3及以后的字符串

    替換 replace()

    s1.replace(2,3,"hala",1,2); //將s1中下標從2開始的3個字符 替換成 "hala"中從下標1開始的2個字符

    插入 insert()

    s1.insert(4,s2); //將s2插入s1下標為4的位置 s1. insert(2,s2,5,3) //將s2中下標5開始的3個字符插入s1下標為2的位置

    轉換成C語言形式char*字符串 c_str()

    s1.c_str(); //返回傳統的const char*類型字符串 //且該字符串以'\0'結尾

    5. 運算

    此處就不詳細解釋了,就挑出了一些容易混淆的地方

    當 / 用于兩個整型數據相除時,其結果取商的整數部分,小數部分被自動舍棄。
    int a = 1/2 ----> a = 0;

    逗號運算

    a=3*5, a*4;
    ---->結果為第二個表達式的值60

    邏輯運算

    && 和 || 具有短路特性。

    • 對于&&,如果第一個表達式為false,則不再對第二個表達式求值;
      (因為無論第二個表達式為多少最后結果都為false)

    • 對于||,如果第一個表達式為true,則不再對第二個表達式求值;
      (a==b) || (++c == 1) 這個表達式中c的自增只有在a!=b的時候才會執行

    位運算

    sizeof 運算

    6. 類型轉換

    隱含類型轉換

    賦值運算要求左值與右值的類型相同,若類型不同,編譯系統會自動將右值轉換為左值的類型。
    ex:

    float fval;double dval;unsigned long ulval;dval = ulval + fval; //ulval被轉換為float類型,加法運算的最終結果被轉化為double

    顯示類型轉換


    float z;
    強制類型轉換int(z)只是將float類型變量z臨時取出來轉換為int型,
    這時變量z所在的內存單元中的值并未真正改變。

    三、算法的基本控制結構

    • if語句 (選擇結構)
    • switch語句(選擇結構)
    • while語句(循環結構)
    • do while語句(循環結構)
    • for語句(循環結構)
    • 其他控制語句

    四、enum 枚舉類型

    語法形式: enum 枚舉類型名 {變量值列表};
    例:enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT};
    默認情況下 SUN=0,MON=1,TUE=2,…,SAT=6


    ex: 口袋中有紅、黃、藍、白、黑五種顏色的球若干個。每次從口袋中取出3個不同顏色的球,問有多少種取法。

    分析: 由于球只能是五種顏色之一,故可用枚舉類型表示球的顏色。
    設取出的球為 i、j、k,根據題意,i、j、k分別可以有五種取值,且i≠j≠k。
    可以用窮舉法,逐個檢驗每一種可能的組合,從中找出符合要求的組合并輸出。

    int main() {enum color{red,yellow,blue,white,black};color pri; //enum color pri;int n = 0; //一共有多少種情況for (int i = red; i <= black; i++)for (int j = red; j <= black; j++)if (i != j){ //前兩個球顏色不同for (int k = red; k <= black; k++)if (k != i && k != j){n = n + 1;cout.width(4);cout << n;//以下代碼為輸出所有組合,解題核心是上面的三層嵌套循環for (int loop = 1; loop <= 3; loop++){switch (loop){case 1:pri = color(i); // (enum color) ibreak;case 2:pri = color(j);break;case 3:pri = color(k);break;default:break;}switch (pri){case red:cout << " red";break;case yellow:cout << " yellow";break;case blue:cout << " blue";break;case white:cout << " white";break;case black:cout << " black";break;default:break;}}cout << endl;}}cout << n;return 0; }

    👉 👉 👉 原文首發 - 小牛肉的個人博客,歡迎來訪~👈 👈 👈

    總結

    以上是生活随笔為你收集整理的【C++复习总结回顾】—— 【一】基础知识+字符串/string类的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。