C++

C++ 知识量:19 - 82 - 316

3.2 标准库类型string><

标准库类型string- 3.2.1 -

C++标准库中的string类型是一个可变长的字符序列,可以包含任意数量的字符。它被定义在<string>头文件中,并被设计为一种标准化的、可移植的、高效的字符串表示形式。

string类型支持多种操作,包括:

  • 创建和初始化:可以通过多种方式创建和初始化string对象,包括使用空字符串创建空对象,使用指定字符串初始化对象等。

  • 连接:可以使用"+"运算符将两个string对象连接起来,生成一个新的string对象。

  • 获取长度:可以使用length()函数获取string对象的长度。

  • 获取字符:可以通过索引来获取string对象中的单个字符。

  • 修改字符:可以通过索引来修改string对象中的单个字符。

  • 查找子串:可以使用find()函数来查找子串在字符串中的位置。

  • 替换子串:可以使用replace()函数来替换子串。

需要注意的是,string类型的操作可能会涉及特殊情况的处理,例如空字符的使用和比较操作符的正确使用等。此外,由于string类型的实现可能因编译器而异,因此某些操作可能在不同的编译器或平台上具有不同的行为。因此,在使用string类型时,建议参考相关的C++标准库文档或规范来确保正确的使用方式。

定义和初始化string对象- 3.2.2 -

可以使用以下方式定义和初始化string对象:

1. 定义空string对象:

std::string str;

2. 定义并初始化string对象:

std::string str = "Hello, world!";

3. 使用字符数组初始化string对象:

char arr[] = {'H', 'e', 'l', 'l', 'o', '\0'};    
std::string str(arr);

4. 使用另一个string对象初始化string对象:

std::string str1 = "Hello";    
std::string str2(str1);

此外,还可以使用字符串字面值或其他字符串表示形式来初始化string对象。

string对象上的操作- 3.2.3 -

在C++中,std::string是一种非常常用的字符串类型,它提供了许多操作来处理字符串。以下是一些常见的std::string操作:

1. 连接字符串:

std::string str1 = "Hello";    
std::string str2 = ", world!";    
std::string str3 = str1 + str2;  // "Hello, world!"

2. 获取字符串长度:

std::string str = "Hello, world!";    
std::size_t len = str.length();  // 13

3. 获取子字符串:

std::string str = "Hello, world!";    
std::string sub = str.substr(7, 5);  // "world"

4. 查找子串:

std::string str = "Hello, world!";    
std::size_t pos = str.find("world");  // 7

5. 替换子串:

std::string str = "Hello, world!";    
str.replace(7, 6, "Universe");  // "Hello, Universe!"

6. 比较字符串:

std::string str1 = "Hello";    
std::string str2 = "Hello";    
if (str1 == str2) { /* do something */ }  // 比较两个字符串是否相等

7. 字符串插入:

std::string str = "Hello";    
str.insert(5, ", world!");  // "Hello, world!"

8. 字符串删除:

std::string str = "Hello, world!";    
str.erase(5, 6);  // "Hello!"  删除了从索引5开始的6个字符。

9. 查找字符位置:

std::string str = "Hello, world!";    
std::size_t pos = str.find_first_of(",");  // 逗号的第一个位置,即6。如果没有找到,返回`std::string::npos`。

C风格字符串- 3.2.4 -

C风格字符串(C-style string)通常指的是使用字符数组来表示的字符串,而不是使用C++风格的类对象(如std::string)。在C语言和C++中,都可以使用C风格的字符串,但在现代编程中,建议使用C++的std::string类,因为它提供了更多的安全性和便利性。

C风格字符串通常是通过字符数组来表示的,每个元素存储一个字符,最后一个元素之后是空字符('\0'),用于标识字符串的结束。例如:

char str[] = "Hello, world!";

在这个例子中,str是一个包含13个字符的数组,包括空字符在内。

使用C风格字符串时,需要注意以下几点:

  1. 字符串以空字符结尾,这是C风格字符串的约定。

  2. 字符串中的字符是ASCII码表示的,每个字符占用一个字节。

  3. C风格字符串通常用于与C语言库交互,因为C++的std::string类不是以NULL结尾的。

  4. C风格字符串不进行自动内存管理,需要手动分配和释放内存。

  5. C风格字符串不提供任何安全性措施,例如防止越界访问。因此,需要格外小心,避免出现安全漏洞。

总的来说,尽管C风格字符串在某些情况下仍然有用,但在现代编程中,建议使用C++的std::string类,因为它提供了更多的安全性和便利性。