您的位置:

C++中利用string截取字符串的方法

一、substr函数

substr函数是C++中string类提供的成员函数,用于返回原字符串中指定位置开始的指定长度的子字符串,其语法如下:

string substr (size_t pos = 0, size_t len = npos) const;

其中,pos表示子字符串的起始位置,len表示子字符串的长度。如果省略len,则子字符串将一直延伸到原字符串的末尾。

下面是一个简单的示例,展示如何使用substr函数截取字符串:

string str = "Hello, world!";
string sub_str = str.substr(7, 5); // 截取位置为7~11的子字符串
cout << sub_str << endl; // 输出 world!

二、find和substr函数结合使用

find函数是C++中string类提供的成员函数,用于查找一个指定的子字符串,并返回其在原字符串中的起始位置。结合substr函数,我们可以从指定位置开始截取字符串。

下面是一个示例,展示如何使用find和substr函数结合使用截取字符串:

string str = "Hello, world!";
size_t pos = str.find("world"); // 查找world子字符串的位置
if(pos != string::npos) { // 如果找到了
    string sub_str = str.substr(pos); // 截取位置为pos~末尾的子字符串
    cout << sub_str << endl; // 输出 world!
}

三、使用stringstream分割字符串

如果需要将一个字符串按照某个分隔符进行分割,可以使用stringstream类。sstream是C++中一个用于字符串流操作的类,它可以将字符串当成输入流或输出流进行处理。

下面是一个示例,展示如何使用stringstream类将一个字符串按照逗号分割:

#include <sstream>
string str = "apple,banana,orange";
stringstream ss(str);
string token;
while(getline(ss, token, ',')) {
    cout << token << endl; // 分别输出 apple、banana、orange
}

四、使用正则表达式分割字符串

如果需要按照更复杂的规则分割字符串,可以使用正则表达式。C++标准库中提供了regex头文件,其中包含了正则表达式相关的类和函数。下面是一个示例,展示如何使用正则表达式将一个字符串按照多个分隔符进行分割:

#include <regex>
string str = "apple bananas oranges";
regex re("\\s+|,");
sregex_token_iterator it(str.begin(), str.end(), re, -1);
sregex_token_iterator end;
while(it != end) {
    cout << *it << endl; // 分别输出 apple、bananas、oranges
    ++it;
}