string

记录STL中string的基本操作:

1、构造函数

    string s1;  // si = ""
    string s2("Hello");  // s2 = "Hello"
    string s3(4, 'K');  // s3 = "KKKK"  生成一个字符串,包含4个K
    string s4("12345", 1, 3);  //s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串

2、赋值

  • 使用直接赋值:
    string s1,s2;
    s1 = "Hello";  // s1 = "Hello"
    s2 = s1;
    s2 = 'K';  // s2 = "K”
  • 使用assign函数赋值:
string s1,s2;
//1、直接赋值字符串ch常量
    s1.assign("Hello");
//2、直接赋值字符串变量
    s2.assign(s1);
//3、赋值num个字符c
    s2.assign(4,'K');   // s2="KKKK"
//4、赋值子串
    s2.assign(s1,2,3);   //s2="llo"

3、元素访问


at


[]


front              访问首字符


back              访问最后的字符


string s1("Hello");
char c;
//1、at
    c = s1.at[0];  //返回请求的字符引用,请求值不能超出字符串的size
//2、[]
    c = s1[0];
//3、front
    c = s1.front();   //等价于s1[0]
//4、back
    c = s1.back();   //等价于s1[4]

 4、迭代器


begin       返回指向起始的迭代器


end          返回指向末尾的迭代器


——图片来自cppreference.com

5、容量

  1. empty()             检查字符串是否为空
  2. length()             字符串长度
  3. max_size()         返回字符数的最大值

6、操作

1)、增删

insert 插入字符
stirng s1("ell");
//index - 插入内容到的位置,insex > size时,报错
//insert(size_type index, size_type count, char ch)
s1.insert(0,1,'H');   //s1 = "Hell"
// insert(size_type index, const char* s)
s1.insert(4,'o');    //s1 = "Hello"    
erase 删除字符
string s1("Hello");
//index - 要移除的首个字符;count - 要移除的字符数
//erase(size_type index, size_type count)
s1.erase(0,2);  // s1 = "llo"

//position - 指向要移除的字符的迭代器 
s1.erase(s1.begin()); //s1 = "lo"
push_back 添加字符到结尾 /
pop_back 移除末尾字符 /
+= 后附字符到结尾
string s1("Hello");
s1 += "World"; //s1 = "Hello World"
clear

清除内容

如同通过执行 erase(begin(), end()) 从 string 移除所有字符

clear后不改变capacity

/

2)、子串

substr 返回子串 [pos, pos+count)  /

3)、查找

find 返回找到的子串的首字符位置,若找不到,返回string::npos
string s = "This is a string";
string::size_type pos;
//从头开始搜索  pos = 2
pos = s.find("is");   
// 从位置 5 开始搜索
pos = s.find("is", 5);  pos = 5

4)、比较

compare
  • 小于 0 表示当前的字符串小;
  • 等于 0 表示两个字符串相等;
  • 大于 0 表示另一个字符串小。
//比较s1的子串和s2的子串
s1.compare(index1,count1,s2,index2,count2);  

 

5)、复制与替换

copy 返回复制的字符数
//copy( CharT* dest, size_type count, size_type pos = 0 ) 
 string foo("quuuux");
 char bar[7]{};
 foo.copy(bar, 3,1); // uuu
replace /
replace( size_type pos, size_type count,const basic_string& str );
string str("Hello World.");
str.replace(5, 5, "aya"); // (5) "Hello aya"

 

6)、stringstream

stringstream是包含在<sstream>中的,其中定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入输出输入输出操作。<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言,<sstream> 更加安全、自动和直接。

用法之一:类型转换

    // int -> string
    stringstream sstream;
    string strResult;
    int nValue = 1000;
 
    // 将int类型的值放入输入流中
    sstream << nValue;
    // 从sstream中抽取前面插入的int类型的值,赋给string类型
    sstream >> strResult;

用法之二:清空流

清空stringstream 有两种方法:clear()方法以及str("")方法,这两种方法有不同的使用场景。

在多次数据类型转换的场景下,必须使用 clear() 方法清空 stringstream,不使用 clear()方法或使用 str("") 方法,都不能得到数据类型转换的正确结果。

 

参考:

cppreference.com

C++ string类(C++字符串)完全攻略

posted @ 2022-09-09 15:57  aya77  阅读(61)  评论(0编辑  收藏  举报