C++【STL】(2)string

C++【STL】string用法擴展

1. assign:為字符串賦新值

用于替換字符串內容,支持多種參數形式。

常用形式:
// 用另一個字符串賦值
str.assign("Hello World");// 用另一個字符串的子串(從第6個字符開始,取5個字符)
str.assign("Hello World", 6, 5);  // 結果:"World"// 用字符數組的前N個字符
str.assign("Hello World", 5);      // 結果:"Hello"// 用重復字符填充(重復5次'A')
str.assign(5, 'A');                // 結果:"AAAAA"// 用迭代器范圍
std::string tmp = "Hello";
str.assign(tmp.begin(), tmp.end()); // 結果:"Hello"

2. replace:替換字符串的某一部分

替換指定位置的字符或子串。

常用形式:
std::string str = "Hello World";// 替換從位置6開始的5個字符為"Universe"
str.replace(6, 5, "Universe");     // 結果:"Hello Universe"// 替換迭代器范圍內的內容
auto start = str.begin() + 6;
auto end = str.begin() + 11;
str.replace(start, end, "Galaxy"); // 結果:"Hello Galaxy"// 用子串替換(替換前3個字符為"Hi")
str.replace(0, 3, "Hi");           // 結果:"Hilo World"// 用重復字符替換(用3個'!'替換前5個字符)
str.replace(0, 5, 3, '!');         // 結果:"!!! World"

3. find:查找子串或字符的位置

返回第一個匹配的位置,未找到返回 string::npos

常用形式:
std::string str = "Hello World";// 查找子串
size_t pos = str.find("World");    // pos = 6// 查找字符
pos = str.find('W');              // pos = 6// 從指定位置開始查找
pos = str.find('l', 3);           // 從位置3開始查找,pos = 3(第一個'l'在位置2,但跳過)// 查找字符集合中任意一個字符
pos = str.find_first_of("aeiou"); // 查找第一個元音,pos = 1('e')// 未找到的示例
if (str.find("Moon") == std::string::npos) {std::cout << "未找到子串";
}

在C++中,std::string::substr 用于從字符串中提取子串。以下是其詳細用法和示例:


substr

基本語法

std::string substr(size_t pos = 0, size_t len = npos) const;
  • 參數
    • pos:子串的起始位置(默認從 0 開始)。
    • len:子串的長度(默認到字符串末尾)。
  • 返回值:新的 std::string 對象,包含提取的子串。

1. 基本提取
std::string str = "Hello World";// 從位置6開始,提取到末尾
std::string sub1 = str.substr(6);      // sub1 = "World"// 從位置0開始,提取5個字符
std::string sub2 = str.substr(0, 5);   // sub2 = "Hello"// 從位置3開始,提取2個字符
std::string sub3 = str.substr(3, 2);   // sub3 = "lo"
2. 處理邊界條件
  • 如果 pos 超出字符串長度,會拋出 std::out_of_range 異常。
  • 如果 len 超出剩余字符數,自動截取到字符串末尾。
std::string str = "Hello";std::string sub1 = str.substr(2, 10);  // sub1 = "llo"(len超出實際長度)
// std::string sub2 = str.substr(10);   // 拋出異常:pos超出范圍
3. 結合 find 動態截取
std::string str = "user@example.com";// 查找 '@' 的位置,提取用戶名
size_t at_pos = str.find('@');
if (at_pos != std::string::npos) {std::string username = str.substr(0, at_pos); // username = "user"
}// 提取域名部分
std::string domain = str.substr(at_pos + 1);      // domain = "example.com"


c_str()

std::string::c_str() 是一個成員函數,用于將 std::string 對象的內容轉換為 C風格字符串(即以空字符 \0 結尾的字符數組)。兼容C語言

#include <string>
#include <cstdio> // 用于 printfint main() {std::string str = "Hello World";const char* cstr = str.c_str();// 與C函數交互(如 printf)printf("C字符串內容: %s\n", cstr); // 輸出: Hello Worldreturn 0;
}

getline

  1. 從標準輸入讀取一行
#include <iostream>
#include <string>int main() {std::string line;std::cout << "請輸入一行文本:";std::getline(std::cin, line);std::cout << "你輸入的內容是:" << line << std::endl;return 0;
}

輸出示例:

請輸入一行文本:Hello C++ World
你輸入的內容是:Hello C++ World
2. 自定義分隔符

#include <sstream>
#include <string>int main() {std::string data = "Apple,Orange,Banana";std::istringstream iss(data);std::string fruit;// 按逗號分隔讀取while (std::getline(iss, fruit, ',')) {std::cout << "水果:" << fruit << std::endl;}return 0;
}

輸出:

水果:Apple
水果:Orange
水果:Banana
3. 混合使用 >> 和 getline

int main() {int age;std::string name;std::cout << "請輸入年齡:";std::cin >> age;  // 輸入后緩沖區殘留換行符// 清除殘留的換行符std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');std::cout << "請輸入姓名:";std::getline(std::cin, name);  // 正確讀取完整姓名(含空格)std::cout << "年齡:" << age << ",姓名:" << name << std::endl;return 0;
}

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

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

相關文章

樹莓派4基于Debian GNU/Linux 12 (Bookworm)開啟VNC,使用MobaXterm連接VNC出現黑屏/灰屏問題

1. 開啟樹莓派的VNC服務 啟用VNC服務&#xff1a;通過raspi-config開啟 # 1. 通過 raspi-config 工具開啟 sudo raspi-config選擇 Interface Options → VNC → Yes退出時會自動啟動服務 檢查服務狀態&#xff1a; sudo systemctl status vncserver-x11-serviced正常輸出應顯示…

MongoDB使用x.509證書認證

文章目錄 自定義證書生成CA證書生成服務器之間的證書生成集群證書生成用戶證書 MongoDB配置java使用x.509證書連接MongoDBMongoShell使用證書連接 8.0版本的mongodb開啟復制集&#xff0c;配置證書認證 自定義證書 生成CA證書 生成ca私鑰&#xff1a; openssl genrsa -out ca…

Python爬蟲實戰:研究js混淆加密

一、引言 在當今數字化時代,數據已成為推動各行業發展的核心驅動力。網絡爬蟲作為一種高效的數據采集工具,能夠從互聯網上自動獲取大量有價值的信息。然而,隨著互聯網技術的不斷發展,許多網站為了保護自身數據安全和知識產權,采用了 JavaScript 混淆加密技術來防止數據被…

Java項目層級介紹 java 層級 層次

java 層級 層次 實體層 控制器層 數據連接層 Service : 業務處理類 Repository &#xff1a;數據庫訪問類 Java項目層級介紹 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java項目中&#xff0c;層級結構&#xff08;Layered Architecture&#xf…

網絡安全頂會——SP 2025 論文清單與摘要

1、"Check-Before-you-Solve": Verifiable Time-lock Puzzles 時間鎖謎題是一種密碼學原語&#xff0c;它向生成者保證該謎題無法在少于T個順序計算步驟內被破解。近年來&#xff0c;該技術已在公平合約簽署和密封投標拍賣等場景中得到廣泛應用。然而&#xff0c;求解…

《100天精通Python——基礎篇 2025 第18天:正則表達式入門實戰,解鎖字符串處理的魔法力量》

目錄 一、認識正則表達式二、正則表達式基本語法2.1 行界定符2.2 單詞定界符2.3 字符類2.4 選擇符2.5 范圍符2.6 排除符2.7 限定符2.8 任意字符2.9 轉義字符2.10 反斜杠2.11 小括號2.11.1 定義獨立單元2.11.2 分組 2.12 反向引用2.13 特殊構造2.14 匹配模式 三、re模塊3.1 comp…

思邁特軟件攜手天陽科技,打造ChatBI金融智能分析新標桿

5月10日&#xff0c;廣州思邁特軟件有限公司&#xff08;以下簡稱“思邁特軟件”&#xff09;與天陽宏業科技股份有限公司&#xff08;以下簡稱“天陽科技”&#xff09;在北京正式簽署戰略合作協議。思邁特軟件董事長吳華夫、CEO姚詩成&#xff0c;天陽科技董事長兼總裁歐陽建…

OPENSSL-1.1.1的使用及注意事項

下載鏈接&#xff1a; OpenSSL1.1.1一個廣泛使用的開源加密庫資源-CSDN文庫 OpenSSL 1.1.1 是一個廣泛使用的開源加密庫&#xff0c;以下是其使用方法及注意事項&#xff1a; 使用方法 安裝&#xff1a; Linux系統&#xff1a; 從源碼編譯安裝&#xff1a;訪問 OpenSSL 官網…

數據庫優化

一、慢 SQL 排查全流程 1. 開啟慢查詢日志&#xff1a;精準定位問題 SQL 慢查詢日志是定位性能問題的首要工具&#xff0c;通過記錄執行超時或未使用索引的 SQL&#xff0c;為優化提供依據。 配置步驟&#xff1a; ① 臨時啟用&#xff08;生效至服務重啟&#xff09; sql …

GO語言-導入自定義包

文章目錄 1. 項目目錄結構2. 創建自定義包3. 初始化模塊4. 導入自定義包5. 相對路徑導入 在Go語言中導入自定義包需要遵循一定的目錄結構和導入規則。以下是詳細指南&#xff08;包含兩種方式&#xff09;&#xff1a; 1. 項目目錄結構 方法1&#xff1a;適用于Go 1.11 &#…

記錄算法筆記(2025.5.11) 二叉樹的中序遍歷

給定一個二叉樹的根節點 root &#xff0c;返回 它的 中序 遍歷 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2] 示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[] 示例 3&#xff1a; 輸入&#xff1a;root [1] …

【iptables防火墻】 -- DDos防御

最近有客戶要定制路由器的默認防火墻等級&#xff0c;然后涉及到了DDos規則&#xff0c;對比客戶提供的規則發現我們現有的規則存在明顯的錯誤&#xff0c;在此記錄一下如何使用iptables防護DDoS攻擊 直接貼一下規則 #開啟TCP SYN Cookies 機制 sysctl -w net.ipv4.tcp_synco…

[Java][Leetcode simple]26. 刪除有序數組中的重復項

思路 第一個元素不動從第二個元素開始&#xff1a;只要跟上一個元素不一樣就放入數組中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}

微服務!!

1.Nacos注冊中心 2.服務注冊 3.服務發現 4.負載均衡 5.OpenFeign 6.OpenFeign連接池 啟動程序 7.路由 8.微服務保護 1.雪崩問題 2.解決方案 1.請求限流 2.線程隔離 3.服務熔斷 3.Sentinel 1.鏈路 2.請求限流 3.線程隔離 4.Fallback 5.服務熔斷 4.分布式事務 1.Seata 2.部…

代碼隨想錄算法訓練營 Day44 動態規劃 ⅩⅠ 子序列問題

動態規劃 題目 1143. 最長公共子序列 - 力扣&#xff08;LeetCode&#xff09; 公共子序列&#xff0c;類似于最長重復子數組&#xff0c;但是不要求連續 (子序列) 1. 定義 dp&#xff0c;dp[i][j] 表示以 i-1 與 j-1 結尾的最長公共子序列的長度 2. 定義遞推公式 如果字符相…

聊一聊接口測試依賴第三方服務變更時如何處理?

目錄 一、依賴隔離與模擬 二、契約測試 三、版本控制與兼容性 四、變更監控與告警 五、容錯設計 六、自動化測試維護 七、協作機制與文檔自動化 第三方API突然改了參數或者返回結構&#xff0c;導致我們的測試用例失敗&#xff0c;這時候該怎么辦呢&#xff1f;首先想到…

Python程序,輸入IP,掃描該IP哪些端口對外是開放的,輸出端口列表

#!/usr/bin/env python # -*- coding: utf-8 -*-""" IP端口掃描程序 輸入IP地址&#xff0c;掃描該IP哪些端口對外是開放的&#xff0c;輸出端口列表 """import socket import sys import concurrent.futures import ipaddress from tabulate im…

Python----神經網絡(《Inverted Residuals and Linear Bottlenecks》論文概括和MobileNetV2網絡)

一、論文 MobileNetV2 論文提出了一種新的移動架構&#xff0c;該架構提高了移動模型在多個任務和基準測試中的性能&#xff0c;以及在各種不同模型大小范圍內的性能. 該架構基于倒殘差結構&#xff0c;其中 shortcut 連接在 thin bottleneck 層之間. 中間的 expansion 層使用輕…

Maven私服搭建與登錄全攻略

目錄 1.背景2.簡介3.安裝4.啟動總結參考文獻 1.背景 回顧下maven的構建流程&#xff0c;如果沒有私服&#xff0c;我們所需的所有jar包都需要通過maven的中央倉庫或者第三方的maven倉庫下載到本地&#xff0c;當一個公司或者一個團隊所有人都重復的從maven倉庫下載jar包&#…

EF Core 數據庫遷移命令參考

在使用 Entity Framework Core 時&#xff0c;若你希望通過 Package Manager Console (PMC) 執行遷移相關命令&#xff0c;以下是常用的 EF Core 遷移命令&#xff1a; PMC 方式 ? 常用 EF Core PMC 命令&#xff08;適用于遷移&#xff09; 操作PMC 命令添加遷移Add-Migra…