📅  最后修改于: 2023-12-03 15:20:20.875000             🧑  作者: Mango
在C++中,字符串是一个非常常用的数据类型,但是C++中的字符串处理并不是非常方便,需要手动维护字符串的长度、分配空间等等。为了简化字符串操作,C++标准库中引入了字符串类,也就是std::string。使用字符串类可以方便的处理字符串的长度,可以动态分配内存,以及有许多方便的成员函数可以使用。
定义和初始化字符串类对象非常简单,只需要通过标准构造函数和初始化函数即可。
#include <string>
using namespace std;
int main()
{
// 声明和初始化
string str = "Hello world!"; // 将字符串常量“Hello world!”赋值给std::string对象str
string str2("Hello world!"); // 使用构造函数初始化
string str3 = string("Hello world!"); // 同样是使用构造函数初始化
return 0;
}
除了上面的方法,你还可以给string类的构造函数传入一些参数来初始化对象。例如:
int main()
{
// 各种初始化方式
string str1(10, 'a'); // 这个string对象中存储的是'a' * 10个
string str2(str1); // 复制构造函数
string str3(str1, 3, 5); // str3存储的是str1中索引为3-7的子串
string str4("Hello world", 5); // str4存储的是“Hello”子串
return 0;
}
经过初始化的串后,我们来看一些常用的string类成员函数。
我们可以通过length()
,size()
和capacity()
函数三个函数来获取字符串的长度和容量。
int main()
{
string str = "Hello world!";
cout << "length = " << str.length() << endl; // 12
cout << "size = " << str.size() << endl; // 12
cout << "capacity = " << str.capacity() << endl; // 15
return 0;
}
size()
和length()
是等价的,都返回字符串的长度。capacity()
返回的是字符数组的最大容量(不包括字符串末尾的\0
),一般情况下它要大于等于字符串实际长度,这是因为string类为了避免每次改变字符串时重新分配内存,它会为其扩充一些预留空间,这些空间并不会使用,但是可以用于存储后续的字符。
我们可以使用find()
和replace()
两个函数来查找和替换字符串中的子串。
int main()
{
string str = "Hello world!";
// 查找子串
int pos = str.find("world"); // 6
if (pos != string::npos) {
cout << "Found at " << pos << endl;
}
// 替换子串
str.replace(pos, 5, "C++");
cout << str << endl; // Hello C++!
return 0;
}
find()
函数返回找到的子串在原字符串中的第一个字符的索引,如果没有找到则返回string::npos
。replace()
函数第一个参数代表要替换的子串在主串中的起始位置;第二个参数是要替换的子串长度;第三个参数是要替换成的新子串。
我们可以使用+=
或append()
函数来进行字符串的拼接,使用insert()
函数来插入子串。
int main()
{
string str1 = "Hello ";
string str2 = "world!";
// 字符串拼接
str1 += str2;
cout << str1 << endl; // Hello world!
// append()函数也可用于字符串拼接
str1.append(" I am C++ programmer!");
cout << str1 << endl; // Hello world! I am C++ programmer!
// 插入子串
str1.insert(13, "almost ");
cout << str1 << endl; // Hello world! almost I am C++ programmer!
return 0;
}
+=
和append()
函数可以用于字符串拼接,它们的作用相同。insert()
函数用法和replace()
函数类似,用于插入子串。
我们可以使用substr()
函数来截取字符串中的子串。
int main()
{
string str = "Hello world!";
// 截取子串
string substr = str.substr(6, 5); // world
cout << substr << endl;
return 0;
}
substr()
函数第一个参数表示要截取的子串的起始位置,第二个参数表示要截取的子串长度。
string类是C++标准库中使用最多的类之一,可以极大的方便程序员的字符串操作,包括字符串的初始化、查找、替换、插入、截取等操作。对于有C++编程基础的程序员,建议多多使用string类,以提高代码的开发效率和可读性,减少编写代码的时间和成本。