C字符串subtr示例
std::string 的substr() 函數用於提取子字符串,1. pos 為起始索引(從0 開始),len 為字符個數(可選,默認到末尾);2. 若pos 等於字符串長度,返回空字符串;3. 若pos 超出長度,拋出std::out_of_range 異常;4. len 超過剩餘字符時自動截斷;5. 使用size_t 類型,避免負數索引。示例包括提取固定長度子串、獲取文件擴展名和分割路徑文件名,使用時需確保pos 有效以防止異常。
在C 中, std::string
的substr()
函數用於從字符串中提取子字符串。它是一個非常常用的操作,語法簡單,使用方便。

基本語法
string substr(size_t pos = 0, size_t len = npos) const;
-
pos
:起始位置(索引,從0 開始) -
len
:要提取的字符個數(可選,默認到字符串末尾)
返回一個新的字符串,包含從pos
開始、最多len
個字符的子串。
示例代碼
#include <iostream> #include <string> using namespace std; int main() { string str = "Hello, World!"; // 1. 從位置7 開始,提取5 個字符string sub1 = str.substr(7, 5); cout << "sub1: " << sub1 << endl; // 輸出: World // 2. 從位置0 開始,提取前5 個字符string sub2 = str.substr(0, 5); cout << "sub2: " << sub2 << endl; // 輸出: Hello // 3. 從位置7 開始,提取到末尾(省略len) string sub3 = str.substr(7); cout << "sub3: " << sub3 << endl; // 輸出: World! // 4. 提取整個字符串string sub4 = str.substr(); cout << "sub4: " << sub4 << endl; // 輸出: Hello, World! // 5. 起始位置超出長度會拋出out_of_range 異常try { string sub5 = str.substr(20); cout << "sub5: " << sub5 << endl; } catch (const out_of_range& e) { cout << "Error: " << e.what() << endl; } return 0; }
常見用法和注意事項
✅ 正確使用方式
- 索引從0 開始
len
可以超過剩餘字符數,substr
會自動截取到末尾- 如果
pos == str.length()
,返回空字符串 - 如果
pos > str.length()
,拋出std::out_of_range
❌ 常見錯誤
str.substr(-1, 3); // 錯誤! pos 是size_t 無符號類型,-1 會變成極大值
實用技巧:獲取文件擴展名
string filename = "example.txt"; size_t dotPos = filename.rfind('.'); if (dotPos != string::npos) { string ext = filename.substr(dotPos 1); cout << "Extension: " << ext << endl; // 輸出: txt }
分割字符串(簡單示例)
string path = "/home/user/file.txt"; size_t lastSlash = path.rfind('/'); if (lastSlash != string::npos) { string filename = path.substr(lastSlash 1); cout << "Filename: " << filename << endl; // 輸出: file.txt }
基本上就這些。 substr()
簡單但容易忽略邊界問題,使用時注意檢查位置是否有效即可。

以上是C字符串subtr示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

打開軟件或遊戲時,突然出現“應用程序無法正常啟動(0xc0000906)”的提示,許多用戶都會感到困惑,不知從何下手。實際上,這類錯誤大多源於系統文件損壞或運行庫缺失。別急著重裝系統,本文為你提供幾種簡單有效的解決方法,助你快速恢復程序運行。一、0xc0000906錯誤到底是什麼?錯誤代碼0xc0000906屬於Windows系統常見的啟動異常,通常表示程序在運行時無法加載必要的系統組件或運行環境。該問題常出現在運行大型軟件或遊戲時,主要原因可能包括:必要的運行庫未安裝或遭到破壞。軟件安裝包不完

電腦提示“計算機中丟失MSVCP71.dll”,通常是因為系統缺少關鍵運行組件,導致軟件無法正常加載。本文將深入解析該文件的功能、報錯根源,並提供三種高效解決方案,助你快速恢復程序運行。一、MSVCP71.dll是什麼? MSVCP71.dll屬於MicrosoftVisualC 2003的核心運行庫文件,屬於動態鏈接庫(DLL)類型,主要用於支持C 編寫的程序調用標準函數、STL模板及基礎數據處理模塊。許多2000年代初開發的應用程序和經典遊戲都依賴此文件運行。一旦該文件缺失或損壞,系

要使用C 中的正則表達式,需包含頭文件,並利用其提供的函數進行模式匹配和文本處理。 1.使用std::regex_match進行全字符串匹配,僅當整個字符串符合模式時返回true;2.使用std::regex_search在字符串中查找任意位置的匹配;3.使用std::smatch提取捕獲組,通過matches[0]獲取完整匹配,matches[1]及後續獲取子匹配;4.使用std::regex_replace替換匹配的文本,支持用$1、$2等引用捕獲組;5.可在構造regex時添加icase(

C 中的運算符重載允許為自定義類型賦予標準運算符新行為,1.通過成員函數重載 返回新對象;2.重載 =修改當前對象並返回引用;3.友元函數重載

在C 中,std::map和std::unordered_map的選擇取決於具體需求。 1.底層結構不同:std::map基於紅黑樹實現,鍵按順序存儲,默認升序,查找和插入複雜度為O(logn);std::unordered_map使用哈希表,無序,平均查找和插入複雜度為O(1),最壞為O(n)。 2.插入性能與內存開銷:map插入需維護樹結構,效率較低;unordered_map插入更快但佔用更多內存,可通過reserve()優化。 3.自定義比較函數:map支持自定義比較函數,unordered

std::vector的基本用法包括:1.聲明vector;2.使用push_back()添加元素;3.用初始化列表初始化;4.用範圍for循環遍歷;5.通過索引或back()訪問元素;6.直接賦值修改元素;7.用pop_back()刪除末尾元素;8.調用size()獲取元素數量;操作時推薦使用constauto&避免拷貝,預分配reserve()提升性能,並註意訪問前檢查非空,該數據結構是處理字符串列表的高效首選方式。

std::variant是C 17引入的類型安全聯合體,能安全地持有多個指定類型之一的值,通過std::get、std::holds_alternative、std::visit和std::get_if等方法實現安全訪問與類型檢查,結合std::monostate可模擬可選值,推薦使用std::visit進行類型分發並避免大型類型列表以提升可維護性,最終確保類型安全和異常安全。

AbasicMakeFileAutomatesc compilationByByDefindingruleswithtargets和commands.2.KeyComponentsIncludeVariablesLikeCXX,CXXFlags,cxxflags,target,srcs,srcs,srcs,srcs,srcs,objstosimplifyConfiguration.3.AptertNrules.3.aptertnrules(compiles)comptiles $ compiles $:%
