1. 头文件

#inlcude <string>

2. std::string & char* 区别

  • char* 是一个指针
  • string是一个类,内部封装了char,是一个char管理容器

3. std::string & C-style 字符串区别

  • std::string 是C++标准库中的字符串类,提供了许多字符串操作的方法和功能,包括长度计算、拼接、查找、替换等。
  • C-style 字符串是一种以空字符 ‘\0’ 结尾的字符数组(char array),通过指向该数组的指针进行访问和操作。

4. std::string构造函数

  • copy ctor
//default (1)
string();
//copy (2)
string (const string& str);
//substring (3)
string (const string& str, size_t pos, size_t len = npos);
//from c-string (4)
string (const char* s);
//from buffer (5)
string (const char* s, size_t n);
//fill (6)
string (size_t n, char c);
//range (7)
template <class InputIterator>  string  (InputIterator first, InputIterator last);
//initializer list (8)
string (initializer_list<char> il);
//move (9)
string (string&& str) noexcept;

copy ctor Test

// string constructor
#include <iostream>
#include <string>

int main ()
{
  std::string s0 ("Initial string");

  // constructors used in the same order as described above:
  std::string s1;
  std::string s2 (s0);
  std::string s3 (s0, 8, 3);
  std::string s4 ("A character sequence");
  std::string s5 ("Another character sequence", 12);
  std::string s6a (10, 'x');
  std::string s6b (10, 42);      // 42 is the ASCII code for '*'
  std::string s7 (s0.begin(), s0.begin()+7);

  std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;
  std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;
  std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';
  return 0;
}
  • assignment ctor
//string (1)
string& operator= (const string& str);
//c-string (2)
string& operator= (const char* s);
//character (3)
string& operator= (char c);
//initializer list (4)
string& operator= (initializer_list<char> il);
//move (5)
string& operator= (string&& str) noexcept;

assignment ctor Test

// string assigning
#include <iostream>
#include <string>

int main ()
{
  std::string str1, str2, str3;
  str1 = "Test string: ";   // c-string
  str2 = 'x';               // single character
  str3 = str1 + str2;       // string

  std::cout << str3  << '\n';
  return 0;
}

5. string容量操作

Func Name usage
size() Return length of string
length() Return length of string
max_size() Return maximum size of string
capacity() Return size of allocated storage
clear() Clear string
empty() Test if string is empty

6. string访问操作

Func Name usage
operator[] Get character of string
at Get character in string
back Access last character
front Access first character

6. string常用方法

  • size() 或 length(): 返回字符串的长度。
  • empty(): 检查字符串是否为空。
  • clear(): 清空字符串内容。
  • c_str(): 返回一个指向以空字符结尾的字符数组的指针。
  • substr(start, length): 返回从指定位置开始的指定长度的子字符串。
  • find(substring): 查找子字符串在主字符串中第一次出现的位置。
  • replace(start, length, new_string): 用新字符串替换指定位置的子字符串。
  • append(string): 在字符串末尾添加新的字符串。
  • insert(pos, string): 在指定位置插入新的字符串。
  • erase(start, length): 从指定位置开始删除指定长度的字符。

7. C-style字符串常用函数

  • strlen(str): 返回字符串的长度。
  • strcpy(dest, src): 将一个字符串复制到另一个字符串。
  • strcat(dest, src): 将一个字符串追加到另一个字符串的末尾。
  • strcmp(str1, str2): 比较两个字符串。
  • strchr(str, ch): 在字符串中查找指定字符的第一个匹配项。
  • strstr(str, substr): 在字符串中查找子字符串的第一个匹配项。
  • strtok(str, delim): 分割字符串为一系列标记,常用于分割单词或子字符串。