@TOC
前言
本系列文章使用VS2022,C++20版本
STL(Standard Template Library)是C++的一个强大工具集,其中的string类是STL中一个常用的容器。本文将介绍string类的基本使用方法。
一、STL使用概述
在STL中,我们的每一个容器/string字符串等都是使用面向对象技术来实现的,我们只需要调用里面的函数即可完成任务。在使用过程中,我们需要using namespace std;
这个才可以使用,然后添加对应的头文件。
比如像下面这个:
#include <string>
using namespace std;
如果你不想加下面这个,你可以这样写:
#include <string>
std::XXXXXX
XXXXX代表我们的类名,需要在前面加上std::
二、string类概述
tring类是STL中用于处理字符串的容器,提供了许多对字符串进行操作的方法,例如插入、删除、查找、替换等。它的特点在于可以动态地调整字符串的长度,而且内部实现了在内存中存储字符串的机制,屏蔽了底层细节。
1.string类的构造函数
- 无参构造string()
- string( size_type length, char ch );指定长度ch构造
- string( const char *str );字符串初始化构造
- string( const char *str, size_type length );str前几个进行构造
- string( string &str, size_type index, size_type length );str中间几个构造
- string(const string& str);拷贝构造
string输出
1.直接使用<<
输出string就行了
2.使用c_str()
函数返回const char *
再输出
示例代码
#include <iostream>
#include <string>
int main() {
// 1. 无参构造string()
std::string str1;
std::cout << "str1: " << str1 << std::endl;
// 2. string(size_type length, char ch);指定长度ch构造
std::string str2(5, 'A');
std::cout << "str2: " << str2 << std::endl;
// 3. string(const char *str);字符串初始化构造
const char* cstr = "Hello, STL!";
std::string str3(cstr);
std::cout << "str3: " << str3 << std::endl;
// 4. string(const char *str, size_type length);str前几个进行构造
std::string str4(cstr, 5);
std::cout << "str4: " << str4 << std::endl;
// 5. string(string &str, size_type index, size_type length);str中间几个构造
std::string str5(str3, 7, 3);
std::cout << "str5: " << str5 << std::endl;
// 6. string(const string& str);拷贝构造
std::string str6(str3);
std::cout << "str6: " << str6 << std::endl;
return 0;
}
输出结果:
str1: str2: AAAAA str3: Hello, STL! str4: Hello str5: STL str6: Hello, STL!
2.string类属性
属性是什么
当我们谈论字符串时,可以将其视为一个字符序列。string类是C++中提供的用于操作字符串的类。它具有许多属性(也称为成员变量或数据成员),这些属性可以让我们更轻松地操作和管理字符串数据。
属性API
- capacity();函数返回一个整数,表示为字符串分配的内存空间的大小,即字符串对象的容量。它指的是当前字符串对象可以容纳的字符数的上限。通常情况下,容量大于或等于字符串的长度。该函数没有参数。
- reserve();函数用于预留字符串的内存空间,以便容纳指定数量的字符。它可以用来提前分配足够的内存,以避免频繁的内存重分配。 这个函数接受一个整数参数,表示要预留的新容量。
- length();函数用于预留字符串的内存空间,以便容纳指定数量的字符。它可以用来提前分配足够的内存,以避免频繁的内存重分配。 这个函数接受一个整数参数,表示要预留的新容量。
- size()函数返回一个整数,表示字符串的长度,即字符串中包含的字符的数量。与之类似的,length()函数也返回字符串的长度。这两个函数是等价的,可以根据个人的偏好来选择使用。
- resize():重新设置字符个数
- max_size()表示字符串对象可以达到的最大长度。这个值是由编译器和系统环境决定的。
示例代码
#include <iostream>
#include <string>
int main() {
std::string str = "Hello World";
// capacity()
std::cout << "Capacity: " << str.capacity() << std::endl;
// reserve()
str.reserve(20);
std::cout << "Capacity after reserve: " << str.capacity() << std::endl;
// length() or size()
std::cout << "Length: " << str.length() << std::endl;
std::cout << "Size: " << str.size() << std::endl;
// resize()
str.resize(8);
std::cout << "After resize: " << str << std::endl;
return 0;
}
输出:
Capacity: 11
Capacity after reserve: 30
Length: 11
Size: 11
After resize: Hello Wo
3.输出
输出全部
1、使用<<
运算符输出
2、使用函数c_str()
返回const char *,然后打印
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
// 使用 << 运算符输出
std::cout << "Output using << operator: " << str << std::endl;
// 使用 c_str() 函数返回 const char *
const char* cstr = str.c_str();
std::cout << "Output using c_str() function: " << cstr << std::endl;
return 0;
}
输出结果:
Output using << operator: Hello, World!
Output using c_str() function: Hello, World!
输出单个字符
1、使用at(index)函数指定返回的字符,越界throw(out_of_range) 2、使用下标运算符[index]指定字符
示例代码:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello World";
// 使用 at(index) 函数
try {
char ch = str.at(4); // 获取索引为4的字符
std::cout << "Character at index 4: " << ch << std::endl;
// 越界访问
char outOfRangeChar = str.at(20); // 索引超出字符串长度,会抛出 std::out_of_range 异常
std::cout << "Character at index 20: " << outOfRangeChar << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << "Exception: " << e.what() << std::endl;
}
// 使用下标运算符 [index]
char ch = str[2]; // 获取索引为2的字符
std::cout << "Character at index 2: " << ch << std::endl;
return 0;
}
输出结果:
Character at index 4: o
Exception: basic_string::at: __n (which is 20) >= this->size() (which is 11)
Character at index 2: l
总结
STL中的string类是一个强大且常用的容器,它提供了丰富的操作方法用于处理字符串。通过采用面向对象的方式实现,STL封装了底层的实现细节,提供了高效和便利的字符串操作接口。面向对象实现的好处包括封装性、可复用性和继承多态等,使得string类在实际应用中更加灵活和扩展性强。掌握STL的string类基础是C++开发的重要一步,通过深入理解其使用方法和面向对象的实现方式,可以更加高效地处理和操作字符串。
【本文由:武汉网站建设 http://www.1234xp.com/wuhan.html 网络转载请说明出处】