String类(上)

简介: String类(上)

string类的基本介绍

string是表示字符序列的字符串类;

 string的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作;

 string在底层实际是basic_string模板类的别名,typedef basic_string<char, char_straits, allocator> tring;

 不能操作多字节或者变长字符序列;

 因为string实际上在stl之前就存在了,只有为了规范统一,就又加了一些东西,导致它有点冗余复杂了。

string类的常用接口

string类的构造函数

image.png

int main()
{
  string str0("hello world");
  string str1;
  string str2(str0);
  string str3(str0, 2, 5);
  string str4("A character sequence");
  string str5("Another charater sequence", 12);
  string str6a(10, 'x');
  string str6b(10, 120);
  string str7(str0.begin(), str0.begin() + 7);
  cout << "str1:" << str1 << endl;
  cout << "str2:" << str2 << endl;
  cout << "str3:" << str3 << endl;
  cout << "str4:" << str4 << endl;
  cout << "str5:" << str5 << endl;
  cout << "str6a:" << str6a << endl;
  cout << "str6b:" << str6b << endl;
  cout << "str7:" << str7 << endl;
  return 0;
}

8794a2585e7e4b9eb7593595b90c4859.png

string类对象的访问及遍历

image.png

int main()
{
  string str("hello world");
  for (string::iterator it = str.begin(); it != str.end(); ++it)
  {
    cout << *it;
  }
  cout << endl;
  for (string::reverse_iterator rit = str.rbegin(); rit != str.rend(); ++rit)
  {
    cout << *rit;
  }
  cout << endl;
  cout << str[1] << endl;
  return 0;
}

961ba293b50d4129a0787fab84f44db2.png

string类对象的容量操作

image.png

size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一直,一般情况下基本都是用size();

 clear()只是将string中有效字符清空,不改变底层空间大小;

 resize(size_t n)与resize(size_t n, char c)都是将字符串中有效字符的个数改变到n个,不同的是党字符个数增加时,resize(n)用0来填充多出的元素空间,resize(size_t n,char c)用字符c来填充多出来的元素空间。

 reserve(size_t res_arg = 0),为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。

// size与length
int main()
{
  string str("hello world");
  cout << "size:" << str.size() << endl;
  cout << "length:" << str.length() << endl;
  cout << "capacity:" << str.capacity() << endl;
  cout << "max_size:" << str.max_size() << endl;
  return 0;
}
// resize
int main()
{
  string str("I like c");
  cout << str << endl;
  str.resize(str.size() + 2, '+');
  cout << str << endl;
  str.resize(5);
  cout << str << endl;
  return 0;
}
// clear
int main()
{
  string str("hello world");
  cout << str << endl;
  cout << "str size:" << str.size() << endl;
  str.clear();
  cout << str << endl;
  cout << "str size:" << str.size() << endl;
  return 0;
}
// empty
int main()
{
  string nullstr;
  string str("hello world");
  cout << nullstr.empty() << endl;
  cout << str.empty() << endl;
  return 0;
}
目录
相关文章
|
12天前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以&#39;\0&#39;结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加&#39;\0&#39;。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
12天前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
14天前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
10天前
|
存储
数据存储之数组的特点,长度固定,适应变化需求,集合类特点是空间可变,ArrayList泛型,ArrayList<String> array = new ArrayList<String>()
数据存储之数组的特点,长度固定,适应变化需求,集合类特点是空间可变,ArrayList泛型,ArrayList<String> array = new ArrayList<String>()
|
12天前
|
C++
【C++】string类的使用④(常量成员Member constants)
C++ `std::string` 的 `find_first_of`, `find_last_of`, `find_first_not_of`, `find_last_not_of` 函数分别用于从不同方向查找目标字符或子串。它们都返回匹配位置,未找到则返回 `npos`。`substr` 用于提取子字符串,`compare` 则提供更灵活的字符串比较。`npos` 是一个表示最大值的常量,用于标记未找到匹配的情况。示例代码展示了这些函数的实际应用,如替换元音、分割路径、查找非字母字符等。
|
12天前
|
C++
C++】string类的使用③(修改器Modifiers)
这篇博客探讨了C++ STL中`string`类的修改器和非成员函数重载。文章介绍了`operator+=`用于在字符串末尾追加内容,并展示了不同重载形式。`append`函数提供了更多追加选项,包括子串、字符数组、单个字符等。`push_back`和`pop_back`分别用于在末尾添加和移除一个字符。`assign`用于替换字符串内容,而`insert`允许在任意位置插入字符串或字符。最后,`erase`函数用于删除字符串中的部分内容。每个函数都配以代码示例和说明。
|
12天前
|
安全 编译器 C++
【C++】string类的使用②(元素获取Element access)
```markdown 探索C++ `string`方法:`clear()`保持容量不变使字符串变空;`empty()`检查长度是否为0;C++11的`shrink_to_fit()`尝试减少容量。`operator[]`和`at()`安全访问元素,越界时`at()`抛异常。`back()`和`front()`分别访问首尾元素。了解这些,轻松操作字符串!💡 ```
|
12天前
|
存储 编译器 Linux
【C++】string类的使用②(容量接口Capacity )
这篇博客探讨了C++ STL中string的容量接口和元素访问方法。`size()`和`length()`函数等价,返回字符串的长度;`capacity()`提供已分配的字节数,可能大于长度;`max_size()`给出理论最大长度;`reserve()`预分配空间,不改变内容;`resize()`改变字符串长度,可指定填充字符。这些接口用于优化内存管理和适应字符串操作需求。
|
12天前
|
C++ 容器
【C++】string类的使用①(迭代器接口begin,end,rbegin和rend)
迭代器接口是获取容器元素指针的成员函数。`begin()`返回首元素的正向迭代器,`end()`返回末元素之后的位置。`rbegin()`和`rend()`提供反向迭代器,分别指向尾元素和首元素之前。C++11增加了const版本以供只读访问。示例代码展示了如何使用这些迭代器遍历字符串。
|
12天前
|
存储 编译器 C语言
【C++】string类的使用①(默认成员函数
本文介绍了C++ STL中的`string`类,它是用于方便地操作和管理字符串的类,替代了C语言中不便的字符数组操作。`string`基于`basic_string`模板,提供类似容器的接口,但针对字符串特性进行了优化。学习资源推荐[cplusplus.com](https://cplusplus.com/)。`string`类提供了多种构造函数,如无参构造、拷贝构造、字符填充构造等,以及析构函数和赋值运算符重载。示例代码展示了不同构造函数和赋值运算符的用法。