【C++ 07】string 類的常用接口介紹

文章目錄

  • 🌈 Ⅰ string 類對象的常見構造函數
  • 🌈 Ⅱ string 類對象的容量相關操作
  • 🌈 Ⅲ string 類對象的訪問及遍歷
    • 1. 下標訪問及遍歷
    • 2. 正向迭代器訪問
    • 3. 反向迭代器訪問
  • 🌈 Ⅳ string 類對象的修改操作
    • 1. 插入字符或字符串
    • 2. 字符替換
  • 🌈 Ⅴ string 類對象的操作
    • 1. 查找指定字符位置
    • 2. 獲取字符串的子串

🌈 Ⅰ string 類對象的常見構造函數

函數說明

函數名稱功能說明
string()構造一個空的 string 類對象,即空字符串
string(const char* s)用一個常量字符串來構造 string 類對象
string(const string& s, size_t pos, size_t len = npos)從指定字符串 s 的 pos 下標處開始拷貝 len 個字符去構造 string 類對象,如果 len 超過了 pos 之后的字符個數,則從 pos 開始直接取到字符串 s 的末尾
string(size_t n, char c)使用 n 個指定字符 c 來構建 string 類對象
string(cost string& s)使用一個已有的 string 類對象去拷貝構造另一個 string 類對象

使用示例

#include <iostream>using std::cout;
using std::endl;
using std::string;void test1()
{string str1;					// 生成空字符串string str2("hello wordl!");	// 用指定常量字符串構造 string 對象string str3("hello", 3, 10);	// 從下標為 3 的字符開始拷貝 10 個字符構造string str4(5, 'x');			// 生成由五個 x 構成的 string 字符串對象string str5(str2);				// 用 str2 來拷貝構造 str5 對象
}

在這里插入圖片描述

🌈 Ⅱ string 類對象的容量相關操作

函數說明

函數名稱功能說明
size()返回字符串有效字符長度,即 \0 之前的字符個數
capacity()求當前 string 能容納的最大有效字符個數,計算的結果不包括 \0
empty()判斷指定字符串是否為空串,是則返回 true,否則返回 false
clear()清空指定字符串中的所有有效字符
reserve(n)為指定字符串預留指定 n 個字節的空間,實際開辟的空間只會 >= n
resize(n, c)將有效字符的個數改為 n,如果 n 大于原有效字符的個數則用指定字符 c 填充剩余位置,反之刪除有效字符個數

使用示例

void test2()
{string str1("hello world!");cout << "size: " << str1.size() << endl;		// 求 str1 串的有效字符個數cout << "capacity: " << str1.capacity() << endl;// 求 str1 能容納的有效字符個數cout << "empty: " << str1.empty() << endl;		// 判斷 str1 是否為空串str1.clear();									// 清空 str1 中的所有有效字符cout << "clear: " << str1 << endl;str1.reserve(100);								// 為 str1 預開辟 >= 100 字節的空間cout << "reserve(100): " << str1.capacity() << endl;string str2("hello world!");str2.resize(5);									// 將 str2 中的有效字符個數改為 5 個cout << "resize(5): " << str2 << endl;string str3("hello world!");str3.resize(30, '#');							// 有效字符數改為 30 個,超出的部分用 # 填充cout << "resize(5, '#'): " << str3 << endl;
}

在這里插入圖片描述

🌈 Ⅲ string 類對象的訪問及遍歷

1. 下標訪問及遍歷

  • 就和遍歷普通的字符串對象一樣,可以使用下標訪問字符串中的每個字符。
  • 能夠使用下標訪問 string 類對象的內容,實際上是在 string 類中使用 operator[ ] 對 [ ] 進行了運算符重載。

在這里插入圖片描述

2. 正向迭代器訪問

  • 正向迭代器分為兩種:普通正向迭代器;常量正向迭代器

1. string 類下的正向迭代器定義格式

  1. 普通正向迭代器
string::iterator 迭代器名 = 對象名.begin() 或 對象名.end();
  1. 常量正向迭代器
string::const_iterator 迭代器名 = 對象名.begin 或 對象名.end();

2. string 類下的正向迭代器介紹

  • 對于正向迭代器,可以使用 begin() 函數返回一個指向指向字符串首字符的迭代器,也可以使用 end() 返回一個指向最后一個有效字符的下一個位置的迭代器。
  • 迭代器指向的字符可以使用 * 訪問,可以對迭代器進行 ++ 或 - - 操作指向字符串的不同字符。
  • 普通的迭代器可以修改迭代器指向的內容,常量迭代器則不能。

在這里插入圖片描述

3. string 類下的正向迭代器示例

在這里插入圖片描述

3. 反向迭代器訪問

  • 反向迭代器分為兩種:普通反向迭代器;常量反向迭代器

1. string 類下的反向迭代器定義格式

  1. 普通反向迭代器
string::reverse_iterator 迭代器名 = 對象名.rbegin() 或 對象名.rend();
  1. 常量反向迭代器
string::const_reverse_iterator 迭代器名 = 對象名.rbegin() 或 對象名.rend();

2. string 類下的反向迭代器介紹

  • 對于反向迭代器,可以使用 rbegin() 返回一個指向最后一個有效字符的迭代器,rend() 返回一個指向字符串首字符前一個位置的迭代器。
  • 不管是迭代器是正向還是反向,對迭代器進行 ++ 操作始終是讓迭代器靠近 ?end 的位置 ,對迭代器進行 – 操作始終是讓迭代器遠離 ?end 的位置

在這里插入圖片描述

3. string 類下的反向迭代器示例

在這里插入圖片描述

🌈 Ⅳ string 類對象的修改操作

1. 插入字符或字符串

函數說明

  • 以下實現插入的函數操作在插入之后如果超過字符串容量都會自動實現擴容
函數名稱功能說明
push_back( c )在指定字符串的末尾插入一個字符
insert(pos, string)在字符串指定的 pos 位置插入一個字符串,原 pos 位置及之后的字符都要后移
append(string)在原字符串后追加一個字符串
operator+=對 += 進行了重載,在原字符串后追加一個字符串

使用示例

void test4()
{string str1("hello");str1.push_back('#');		// 將 # 尾插入 st1 末尾string str2("hello");str2.insert(0, "insert ");	// 在下標 0 處插入字符串string str3("hello");str3.append(" append");		// 在字符串末尾追加字符串string str4("hello");str4 += " operator+=";		// 在字符串末尾追加字符串
}

在這里插入圖片描述

2. 字符替換

函數說明

函數名稱功能說明
replace(pos, n, s)將字符串中 pos 位置開始的 n 個字符替換成字符串 s

使用示例

在這里插入圖片描述

🌈 Ⅴ string 類對象的操作

1. 查找指定字符位置

函數說明

函數名稱功能說明
find(c, pos)從字符串的 pos 位置開始 往后 查找指定字符 c,返回該字符在字符串中的位置,如果不提供 pos 默認從第一個有效字符開始,如果找不到指定字符 c 則返回一個 string::npos
rfind(c, pos)從字符串的 pos 位置開始 往前 查找指定字符 c,返回該字符在字符串中的位置,如果不提供 pos 默認從最后一個有效字符開始,如果找不到指定字符 c 則返回一個 string::npos

使用示例

void test5()
{string str("hello hello");size_t pos1 = str.find('e', 0);	// 從第  1 個字符開始 往后 找字符 e 的位置size_t pos2 = str.rfind('e', 9);// 從第 10 個字符開始 往前 找字符 e 的位置if (pos1 != string::npos)		// find 找到了指定字符 e{cout << "find: " << pos1 << endl;}if (pos2 != string::npos)		// rfind 找到了指定字符 e{cout << "rfind: " << pos2 << endl;}
}

在這里插入圖片描述

2. 獲取字符串的子串

函數說明

函數名稱函數功能
substr(pos, n)截取指定字符串的從 pos 下標開始的往后 n 個字符作為該串的子串返回,如果不指定 n,則默認從 pos 位置一直取到字符串末尾

使用示例

void test5()
{string str("hello world!");string sub1 = str.substr(3, 5);	// 從下標 3 開始截取 5 個字符string sub2 = str.substr(3);	// 從下標 3 開始一直取到最后一個有效字符
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718234.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據分析業務面試題

目錄 Q1:請簡述數據分析的工作流程? Q2:你經常用到的數據分析方法有哪些,舉例說明? Q3:公司最近一周的銷售額下降了,你如何分析下降原因? Q4:店鋪銷售額降低如何分析? Q5:若用戶留存率下降如何分析? Q6:店鋪商品銷售情況分布后 Q7:如何描述店鋪經營狀況?…

Vue前端的工作需求

加油&#xff0c;新時代打工人&#xff01; 需求&#xff1a; 實現帶樹形結構的表格&#xff0c;父數據顯示新增下級&#xff0c;和父子都顯示編輯。 技術&#xff1a; Vue3 Element Plus <template><div><el-table:data"tableData"style"width…

了解游戲中的數據同步

目錄 數據同步 通過比較來看狀態同步和幀同步 狀態同步 幀同步 幀同步實現需要的條件 兩者相比較 數據同步 在聯機游戲中&#xff0c;我的操作和數據要同步給同一局游戲中其他所有玩家&#xff0c;其他玩家的操作和數據也會同步給我。這叫做數據同步&#xff0c;目前數據…

國產數據庫概述

這是ren_dong的第33篇原創 1、什么是數據庫&#xff1f; 1.1、基本概念 定義&#xff1a;數據庫是 按照一定的數據結構組織、存儲和管理數據的倉庫。可視為電子化的文件柜&#xff0c;用戶可以對文件中的數據進行新增、查詢、更新、刪除等操作。 作用&#xff1a;業務數據 存儲…

kettle下載及安裝

JDK下載 安裝kettle之前需要安裝JDK JDK下載鏈接&#xff1a;JDK下載 配置環境變量&#xff1a; 新建系統變量&#xff1a;變量值為JDK安裝路徑 Path新增&#xff1a; kettle下載 鏈接地址&#xff1a;PDI&#xff08;kettle&#xff09; 點擊下載 同意 Click here to a…

【XIAO ESP32S3 sense 通過 ESPHome 與 Home Assistant 連接】

XIAO ESP32S3 sense 通過 ESPHome 與 Home Assistant 連接 1. 什么是 ESPHome 和 Home Assistant&#xff1f;2. 軟件準備3. 開始4. 將 Grove 模塊與 ESPHome 和 Home Assistant 連接5. Grove 連接和數據傳輸6. Grove -智能空氣質量傳感器 &#xff08;SGP41&#xff09;7. OV2…

Filter(過濾器)

文章目錄 過濾器的編寫&#xff1a;過濾器 APIFilterFilterConfigFilterChain 生命周期過濾器核心方法的細節多個過濾器執行順序<br /> 過濾器——Filter&#xff0c;它是JavaWeb三大組件之一。另外兩個是Servlet和Listener。 它是在2000年發布的Servlet2.3規范中加入的一…

Go語言基礎基礎

簡介 Go語言&#xff08;也稱為Golang&#xff09;是一種靜態類型、編譯型語言&#xff0c;由Google的Robert Griesemer、Rob Pike和Ken Thompson于2007年設計&#xff0c;首次公開發布于2009年。Go的設計初衷是解決當時谷歌內部面臨的軟件開發問題&#xff0c;特別是在處理大…

百度文庫旋轉驗證碼識別

最近研究了一下圖像識別&#xff0c;一直找到很好的應用場景&#xff0c;今天我就發現可以用百度的旋轉驗證碼來做一個實驗。沒想到效果還挺好&#xff0c;下面就是實際的識別效果。 1、效果演示 2、如何識別 2.1準備數據集 首先需要使用爬蟲&#xff0c;對驗證碼圖片進行采…

區塊鏈媒體發布推廣10個熱門案例解析-華媒舍

區塊鏈技術的發展已經引起了媒體的廣泛關注&#xff0c;越來越多的區塊鏈媒體紛紛發布推廣相關的熱門案例。本文將介紹10個成功的區塊鏈媒體推廣案例&#xff0c;并分享它們的成功秘訣&#xff0c;幫助讀者更好地了解區塊鏈媒體推廣的方法與技巧。 隨著區塊鏈技術的成熟和應用場…

第二證券:富時羅素擴容 A股引入國際增量資金

日前&#xff0c;英國富時羅素指數公司&#xff08;FTSE Russell&#xff0c;簡稱“富時羅素”&#xff09;公布的全球股票指數&#xff08;FTSE Global Equity Index Series&#xff09;半年度指數檢查陳述顯現&#xff0c;將新調入A股76只、調出1只。此前&#xff0c;富時羅素…

Leetcode 3049. Earliest Second to Mark Indices II

Leetcode 3049. Earliest Second to Mark Indices II 1. 解題思路2. 代碼實現3. 算法優化 題目鏈接&#xff1a;3049. Earliest Second to Mark Indices II 1. 解題思路 這道題我看貌似難度報表&#xff0c;比賽的時候貌似只有36個人搞定了這道題目&#xff0c;然后最快的人…

【LeetCode】升級打怪之路 Day 12:單調隊列

今日題目&#xff1a; 239. 滑動窗口最大值 | LeetCode 今天學習了單調隊列這種特殊的數據結構&#xff0c;思路很新穎&#xff0c;值得學習。 Problem&#xff1a;單調隊列 【必會】 與單調棧類似&#xff0c;單調隊列也是一種特殊的數據結構&#xff0c;它相比與普通的 que…

Get Your Back Covered! Coverage, CodeCov和Tox

1. Coverage - 衡量測試的覆蓋率 我們已經掌握了如何進行單元測試。接下來,一個很自然的問題浮現出來,我們如何知道單元測試的質量呢?這就提出了測試覆蓋率的概念。覆蓋率測量通常用于衡量測試的有效性。它可以顯示您的代碼的哪些部分已被測試過,哪些沒有。 coverage.py …

Arm平臺下各種memcpy優化對比<二>

因memcpy導致tda4vm上的h264解碼占CPU較高而改棄&#xff0c;從網上找到各種memcpy的優化代碼&#xff0c;在一起做了個運行速度對比&#xff0c;請查收&#xff1b; #include <stdio.h> #include <stdlib.h> /* rand, srand */ #include <string.h> #i…

智慧公廁:打造智慧城市的環衛明珠

在城市建設中&#xff0c;公共衛生設施的完善和智能化一直是重要環節。而智慧公廁作為智慧城市建設的重要組成部分&#xff0c;發揮著不可替代的作用。本文以智慧公廁源頭實力廠家廣州中期科技有限公司&#xff0c;大量精品案例現場實景實圖&#xff0c;解讀智慧公廁如何助力打…

【數據結構】B樹

1 B樹介紹 B樹&#xff08;英語&#xff1a;B-tree&#xff09;&#xff0c;是一種在計算機科學自平衡的樹&#xff0c;能夠保持數據有序。這種數據結構能夠讓查找數據、順序訪問、插入數據及刪除的動作&#xff0c;都在對數時間內完成。B樹&#xff0c;概括來說是一個一般化的…

MySQL高可用性攻略:快速搭建MySQL主從復制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主從復制集群 &#xff01; MySQL基礎知識&#xff1a;介紹MySQL數據庫的基本概念和常用命令&#xff0c;如何創建數據庫、表、用戶和權限管理等。 MySQL安裝教程&#xff1a;Centos7 安裝MySQL5.7.29詳細安裝手冊 MySQL數據類型&…

【大廠AI課學習筆記NO.63】模型的維護

說是模型的維護&#xff0c;其實這堂課都是在講“在工業環境中開發和部署機器學習模型的流程”。 上圖來自于我的筆記思維腦圖&#xff0c;已經上傳&#xff0c;要鏈接的訪問的主頁查看資源。 一路走來&#xff0c;我們學習了數據管理、模型學習、模型驗證、模型部署等重要的步…

arm板運行程序時尋找動態庫的路徑設置

問題&#xff1a;error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file&#xff1f; 第一種方法---- 解決&#xff1a; ①復制需要用到的arm庫到板子上。 ②pwd指令獲取該庫的絕對路徑&#xff0c;把路徑復制到/etc/ld.so.conf文件 ③輸…