C++ String::substr() 函数



C++ 的std::string::substr()函数用于从给定的字符串对象获取子字符串。它接受两个参数:子字符串的起始位置和子字符串的长度。此函数返回一个新的字符串对象,其中包含原始字符串的指定部分。

如果长度参数放置错误,则默认为从起始位置提取到字符串末尾的子字符串。

语法

以下是 std::string::substr() 函数的语法。

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

参数

  • pos - 指示要复制的第一个字符的位置。
  • len - 指示子字符串中包含的字符数。

返回值

此函数返回一个字符串对象。

示例 1

以下是使用 C++ 中的 std::substr() 函数创建从索引 0 开始并以索引 10 结束的子字符串的基本程序。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string str = " Tutorialspoint ";
   string sub = str.substr(0, 10);
   cout << sub << endl;
   return 0;
} 

输出

让我们编译并运行上述程序,这将产生以下结果:

Tutorials

示例 2

在此示例中,substr 仅使用起始位置调用,因此它会从该位置创建到字符串末尾的子字符串。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string str = " Tutorialspoint ";
   string sub = str.substr(10);
   cout << sub << endl;
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出。

point

示例 3

以下是另一个创建子字符串位置大于字符串长度导致 out_of_range 异常的示例。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string str = " Tutorialspoint ";
   try {
      string sub = str.substr(50);
   } catch (const std::out_of_range & e) {
      cout << "Exception: " << e.what() << endl;
   }
   return 0;
}

输出

以下是上述代码的输出。

Exception: basic_string::substr: __pos (which is 50) > this->size() (which is 16)                  

示例 4

在此示例中,我们使用等于字符串长度的起始位置调用子字符串,它返回一个空字符串。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string str = "Tutorialspoint";
   string sub = str.substr(str.length());
   cout << "Empty string = '" << sub << "'" << endl;
   return 0;
} 

输出

以下是上述代码的输出。

Empty string = ''  
string.htm
广告