C++中的string类
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们的程序中使用string类型,我们必须包含头文件 <string>。如下: #include <string> //注意这里不是string.h string.h是C字符串头文件 1.声明一个C++字符串 声明一个字符串变量很简单: ### C++中的string类 #### 引言 在C++编程语言中,`string`类是一种非常实用且功能强大的工具,它为处理文本数据提供了极大的便利。与传统的`char *`字符串相比,`string`类提供了更多的内置方法来简化字符串的操作,并确保了内存管理的安全性。本文将详细介绍如何在C++程序中使用`string`类,包括其声明、初始化、常用成员函数以及一些高级用法。 #### 包含必要的头文件 要在C++程序中使用`string`类,必须首先包含 `<string>` 头文件。请注意,不要将其与C语言中的 `<string.h>` 混淆: ```cpp #include <string> ``` #### 声明C++字符串 声明一个`string`类型的变量非常简单: ```cpp string Str; ``` 这行代码声明了一个名为`Str`的空字符串。`string`类还支持多种构造方式: 1. **默认构造**:创建一个空字符串。 ```cpp string s; ``` 2. **从另一个字符串构造**:使用已存在的字符串作为初始值。 ```cpp string str1 = "Hello"; string str2(str1); ``` 3. **从字符串的一部分构造**:指定起始位置和长度。 ```cpp string str("Hello World"); string sub_str(str, 6, 5); // "World" ``` 4. **从C风格字符串构造**:将C风格字符串转换为`string`对象。 ```cpp char c_str[] = "Hello"; string from_c_str(c_str); ``` 5. **从字符数组构造**:指定字符数组及其长度。 ```cpp char chars[] = {'H', 'e', 'l', 'l', 'o'}; string from_chars(chars, 5); ``` 6. **重复构造**:创建一个由多个相同字符组成的字符串。 ```cpp string repeated(5, '!'); ``` 7. **从迭代器范围构造**:使用两个迭代器定义字符串范围。 ```cpp char arr[] = "Hello"; string from_iter(arr, arr + 5); ``` #### `string`类的常用成员函数 `string`类提供了一系列强大的成员函数来实现字符串的修改和查询: 1. **赋值操作** - `=`, `assign()`: 用于赋值操作。 ```cpp string str = "Hello"; str.assign("World"); ``` 2. **交换操作** - `swap()`: 用于交换两个字符串的内容。 ```cpp string str1 = "Hello"; string str2 = "World"; str1.swap(str2); ``` 3. **追加操作** - `+=`, `append()`, `push_back()`: 用于向字符串末尾添加内容。 ```cpp string str = "Hello"; str += " World"; str.append("!"); str.push_back('!'); ``` 4. **插入操作** - `insert()`: 在指定位置插入新的内容。 ```cpp string str = "Hello"; str.insert(1, "i"); ``` 5. **删除操作** - `erase()`: 删除字符串中的一部分或全部内容。 ```cpp string str = "Hello World"; str.erase(6, 5); ``` - `clear()`: 清空字符串。 ```cpp string str = "Hello"; str.clear(); ``` 6. **替换操作** - `replace()`: 替换字符串中的一部分内容。 ```cpp string str = "Hello"; str.replace(1, 1, "i"); ``` 7. **比较操作** - `==`, `!=`, `<`, `<=`, `>`, `>=`, `compare()`: 用于比较两个字符串。 ```cpp string str1 = "Hello"; string str2 = "World"; bool equal = (str1 == str2); int cmp = str1.compare(str2); ``` 8. **获取长度** - `size()`, `length()`: 获取字符串的长度。 ```cpp string str = "Hello"; size_t len = str.size(); // 或 str.length(); ``` 9. **获取最大容量** - `max_size()`: 获取字符串的最大可能长度。 ```cpp size_t max_len = str.max_size(); ``` 10. **检查是否为空** - `empty()`: 检查字符串是否为空。 ```cpp string str = ""; bool is_empty = str.empty(); ``` 11. **获取容量** - `capacity()`: 获取当前分配给字符串的空间大小。 ```cpp string str = "Hello"; size_t cap = str.capacity(); ``` 12. **预留空间** - `reserve()`: 预先分配内存以提高性能。 ```cpp string str; str.reserve(100); ``` 13. **访问元素** - `[]`, `at()`: 访问字符串中的单个字符。 ```cpp string str = "Hello"; char ch = str[1]; // 或 str.at(1); ``` 14. **从流中读取/写入** - `>>`, `getline()`: 从输入流中读取字符串。 ```cpp string str; cin >> str; getline(cin, str); ``` - `<<`: 向输出流写入字符串。 ```cpp cout << "Hello"; ``` 15. **复制到C风格字符串** - `copy()`, `c_str()`: 将字符串复制到C风格字符串。 ```cpp string str = "Hello"; char c_str[10]; str.copy(c_str, str.size()); ``` ```cpp const char* ptr = str.c_str(); ``` 16. **获取数据指针** - `data()`: 获取指向字符串内容的指针。 ```cpp string str = "Hello"; char* data = str.data(); ``` 17. **提取子字符串** - `substr()`: 提取字符串的一部分。 ```cpp string str = "Hello World"; string sub = str.substr(6, 5); // "World" ``` 18. **迭代器操作** - `begin()`, `end()`: 返回指向字符串开头和结尾的迭代器。 ```cpp string str = "Hello"; for (auto it = str.begin(); it != str.end(); ++it) { cout << *it; } ``` - `rbegin()`, `rend()`: 返回指向字符串结尾和开头的反向迭代器。 ```cpp string str = "Hello"; for (auto rit = str.rbegin(); rit != str.rend(); ++rit) { cout << *rit; } ``` #### 使用注意事项 当使用`string`类时,需要注意以下几点: 1. **边界检查**:使用`[]`或`at()`访问字符串元素时,确保索引不会超出范围。 - `[]`允许访问超过字符串长度的位置,但返回的是`\0`。 - `at()`会检查索引的有效性,如果索引无效则抛出`out_of_range`异常。 ```cpp string str = "Hello"; char ch = str.at(10); // 抛出 std::out_of_range ``` 2. **容量与大小的区别**: - `size()`或`length()`返回字符串中实际的字符数量。 - `capacity()`返回为字符串分配的内存大小。 ```cpp string str = "Hello"; str.reserve(100); // 分配足够的空间存储100个字符 ``` 3. **C风格字符串与`string`之间的转换**: - 使用`c_str()`获取字符串的C风格表示形式。 - 使用`data()`获取指向字符串内容的指针。 ```cpp string str = "Hello"; const char* c_str = str.c_str(); char* data = str.data(); ``` 4. **内存安全**:`string`类内部自动管理内存,避免了手动释放内存的问题,使得程序更加健壮。 5. **字符串连接**:使用`+`或`+=`可以轻松地将多个字符串连接在一起。 ```cpp string str1 = "Hello"; string str2 = " World!"; string combined = str1 + str2; ``` #### 总结 通过本文的介绍,我们了解了如何在C++中使用`string`类来处理字符串数据。`string`类不仅提供了丰富的功能,还保证了内存管理的安全性和效率。无论是基本操作还是复杂的字符串处理任务,`string`类都能提供强大的支持。在实际开发过程中,熟练掌握并运用这些技巧将极大地提升编程效率和代码质量。
- lanmaomao10012012-10-13里面介绍的是string的用法,而不是源代码 下载则切记
- designer20062013-06-28颇有上当的感觉,这些用法随便搜得到啦
- 粉丝: 0
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助