优草派  >   Python

string截取字符串

张鹏            来源:优草派

在日常开发中,我们经常需要对字符串进行截取操作来获取需要的信息。在C++中,我们可以使用string类提供的substr()函数来完成字符串截取操作。本文将从多个角度分析string截取字符串的方法和技巧。

一、substr()函数的使用

string截取字符串

substr()函数的语法如下:

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

其中,pos表示截取的起始位置,len表示截取的长度。如果不指定len,则默认截取到字符串的末尾。

例如,下面的代码截取了字符串str中从第2个字符开始的3个字符:

```C++

string str = "hello world";

string sub = str.substr(1, 3);

cout << sub; // 输出ell

```

二、截取多个子字符串

有时候我们需要从一个字符串中截取多个子字符串,可以通过循环调用substr()函数来实现。例如,下面的代码截取了字符串str中以空格分隔的多个子字符串:

```C++

string str = "hello world";

vector subs;

size_t pos = 0;

while ((pos = str.find(" ")) != string::npos) {

subs.push_back(str.substr(0, pos));

str.erase(0, pos + 1);

}

subs.push_back(str);

for (auto sub : subs) {

cout << sub << endl;

}

```

三、截取指定字符之间的子字符串

有时候我们需要截取字符串中两个指定字符之间的子字符串。可以通过find()函数和substr()函数结合使用来实现。例如,下面的代码截取了字符串str中两个冒号之间的子字符串:

```C++

string str = "key:value";

size_t pos1 = str.find(":");

size_t pos2 = str.find(":", pos1 + 1);

string sub = str.substr(pos1 + 1, pos2 - pos1 - 1);

cout << sub; // 输出value

```

四、截取文件名和扩展名

有时候我们需要从文件路径中截取文件名和扩展名。可以通过rfind()函数和substr()函数结合使用来实现。例如,下面的代码截取了文件路径中的文件名和扩展名:

```C++

string path = "C:/Users/abc/123.txt";

size_t pos1 = path.rfind("/");

size_t pos2 = path.rfind(".");

string filename = path.substr(pos1 + 1, pos2 - pos1 - 1);

string ext = path.substr(pos2 + 1);

cout << filename << endl; // 输出123

cout << ext << endl; // 输出txt

```

五、截取指定长度的子字符串

有时候我们需要截取字符串中指定长度的子字符串。可以通过substr()函数和string::npos结合使用来实现。例如,下面的代码截取了字符串str中前5个字符:

```C++

string str = "hello world";

string sub = str.substr(0, 5);

cout << sub; // 输出hello

```

六、结合正则表达式进行截取

有时候我们需要根据正则表达式来截取字符串中的子字符串。可以使用C++11中新增的regex类来实现。例如,下面的代码使用正则表达式截取了字符串str中所有数字:

```C++

string str = "abc123def456";

regex reg("\\d+");

sregex_iterator it(str.begin(), str.end(), reg);

sregex_iterator end;

while (it != end) {

cout << it->str() << endl;

++it;

}

```

七、截取UTF-8编码的字符串

在处理中文字符串时,我们需要考虑UTF-8编码的问题。可以使用第三方库utf8-cpp来实现UTF-8编码的字符串截取。例如,下面的代码截取了UTF-8编码的字符串str中的前5个字符:

```C++

#include "utf8.h"

string str = "你好,世界";

string sub;

utf8::unchecked::iterator it(str.begin());

utf8::unchecked::iterator end(str.begin() + 5);

utf8::unchecked::append(it, end, back_inserter(sub));

cout << sub; // 输出你好,

```

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行