了解C++中的子字符串
在本文中,我们将介绍如何理解在C++中使用子字符串。
通常,在很多情况下,我们想从字符串中提取特定的模式。
在原始C中,我们需要自己手动提取它们。
但是,对于这种情况,C++标准库为我们提供了易于使用的功能。
让我们来看一些示例,看看如何使用此功能!
C++子字符串–基本语法
我们可以使用C++中的substring函数提取子字符串。
这是<string>头文件的一部分,因此我们必须包括它。
该函数的语法如下:
#include <string> std::string substr(size_t pos, size_t len) const;
这个函数有两个参数,pos和len。
其中" pos"代表子字符串的起始索引,从0开始。
同样," len"代表子字符串的长度。
因此,从本质上讲,我们看一下字符串" original_string [pos]"到`original_string [pos + len-1]。
它将返回相应的字符串对象。
但是,如果pos
=strlen(original_string)
,则只返回一个空字符串,因为string [last_pos] =‘\ 0’(空)!
如果pos
>strlen(original_string)
,我们将收到一个out_of_range
异常。
为了更好地理解这一点,让我们看一些示例。
在C++中使用子字符串–一些示例
让我们先来看一个简单的案例,在该案例中,我们将直接获取以下字符串的子字符串(前5个字符):
"公路上的你好"
#include <iostream> #include <string> using namespace std; int main () { string original_string = "Hello from theitroad"; //We want string[0:4] using substr() string substring = original_string.substr(0,5); cout << original_string << '\n'; cout << substring << '\n'; return 0; }
输出
Hello from theitroad Hello
确实,我们能够获得正确的子字符串!
让我们再看一个示例,在给定的匹配项之后打印子字符串。
我们将从第一个字符开始打印子字符串,直到找到匹配的字符串(" –")
我们可以将find()
函数与substr()
一起使用
#include <iostream> #include <string> using namespace std; int main () { string original_string = "Hello from -- theitroad"; //Let's find the position of "--" using str.find() int position = original_string.find("--"); //We'll get the substring until this pattern string substring = original_string.substr(0, position); cout << original_string << '\n'; cout << substring << '\n'; return 0; }
输出
Hello from -- theitroad Hello from
我们能够匹配子字符串直到给定的模式!
让我们再看一个示例,其中pos
>strlen(original_string)
。
#include <iostream> #include <string> using namespace std; int main () { string original_string = "Hello from theitroad"; //Since 90 > strlen(original_string) = 24, this will raise an Exception string substring = original_string.substr(90, 100); cout << original_string << '\n'; cout << substring << '\n'; return 0; }
输出
terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr: __pos (which is 90) > this->size() (which is 24) [1] 236 abort (core dumped) ./a.out
由于起始位置pos大于原始字符串的长度,因此我们得到一个out_of_range异常。
因此,每当使用str.substr()
时都要小心,并始终确保检查字符串的长度,或者准备处理异常!