C++ std::string::substr 子字串用法與範例

本篇介紹 C/C++ std::string::substr 子字串的用法與範例,substr 就是從字串中擷取出一段子字串的一個成員函式,substr 可使指定子字串的起始位置一直到結束字元,substr 也可以子字串的指定起始位置跟長度,接下來看看 substr 的使用範例。

要使用 std::string::substr 的話,需要引入的標頭檔: <string>

C++ std::string::substr 子字串使用範例

以下為 std::string::substr 子字串的範例,範例中示範指定起始位置的子字串,另外還示範指定起始位置跟長度的例子,substr 傳回的子字串是新建立一個字串

std-string-substr.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// g++ std-string-substr.cpp -o a.out
#include <iostream>
#include <string>

int main() {
std::string str = "Hello World";
std::string str2("World");

std::cout << str.substr(1) << "\n";

std::cout << str.substr(6) << "\n";

std::string str3 = str.substr(1, 4);
std::cout << str3 << "\n";

str3 = "123456789abcdef";
std::cout << str3 << "\n";

return 0;
}

輸出如下,

1
2
3
4
ello World
World
ello
123456789abcdef

C++ std::string::find 搭配 substr 取出子字串

如果有找到的話會回傳找到的位置,如果沒有找到會回傳 string::npos,以下例子示範有找到跟沒找到的情況,並且有找到的話把位置印出來,

std-string-substr2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// g++ std-string-substr2.cpp -o a.out
#include <iostream>
#include <string>

int main() {
std::string str = "Hello World";
std::string str2("World");

std::size_t found = str.find(str2);
if (found != std::string::npos) {
std::cout << "found at " << found << "\n";
std::cout << str.substr(found+1) << "\n";
}

found = str.find("Wo");
if (found != std::string::npos) {
std::cout << "found at " << found << "\n";
std::cout << str.substr(found+1) << "\n";
}

found = str.find("lo");
if (found != std::string::npos) {
std::cout << "found at " << found << "\n";
std::cout << str.substr(found+1) << "\n";
}

return 0;
}

輸出如下,

1
2
3
4
5
6
found at 6
orld
found at 6
orld
found at 3
o World

延伸閱讀:C++ std::string::find 搜尋字串用法與範例

C++ std::string::rfind 搭配 substr 取出子字串

std::string::rfind 是從字串右邊向左搜尋,經常在路徑中擷取檔案名稱或目錄名稱時和 substr 搭配使用,做法是找路徑中最右邊的 '/' 字元,再從找到的 '/' 字元起始位置之後用 substr 取出子字串。另外補充一下 linux / macOS 的路徑分隔字元為 /,Windows 的路徑分隔字元為 \,在程式裡要用兩個反斜線 \\ 代表 \

std-string-substr3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// g++ std-string-substr3.cpp -o a.out
#include <iostream>
#include <string>

int main() {
std::string str = "/home/shengyu/main.cpp";
std::size_t found = str.rfind("/");
if (found != std::string::npos) {
std::cout << "found at " << found << "\n";
std::cout << str.substr(found+1) << "\n";
} else {
std::cout << "not found\n";
}

return 0;
}

輸出如下,找到最右邊的 / 字元的起始位置後,並且用 string::substr 擷取出子字串,

1
2
found at 13
main.cpp

延伸閱讀:C++ std::string::rfind 搜尋字串用法與範例

以上就是 C++ std::string::substr 子字串用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其他參考
string::substr - C++ Reference
https://www.cplusplus.com/reference/string/string/substr/

其它相關文章推薦
C/C++ 新手入門教學懶人包
std::string 用法與範例
C++ virtual 的兩種用法
C/C++ 字串反轉 reverse
C/C++ call by value傳值, call by pointer傳址, call by reference傳參考 的差別
C++ 類別樣板 class template
std::sort 用法與範例
std::find 用法與範例
std::queue 用法與範例
std::map 用法與範例