【C++学习笔记】标准模板库STL-string

string常用特性

  • string对象的长度用成员函数length()读取;
string s("hello");
cout<<s.length()<<endl;
  • string支持getline函数
string s;
getline(cin,s);
  • string的赋值
s2 = s1;

s3.assign(s1);       //把s1赋值给s3

s3.assign(s1,1,3); //把s1中从下标1开始复制3个字符到s3中

也可以单个赋值:
s2[5] = s1[3] = 'a';

  • 逐个访问
string s1("hello");
for(int i = 0; i<s1.length(); i++)
    cout<<s1.at(i)<<endl;

成员函数at()会做范围检查,如果超出范围,会抛出out_of_range异常,而下标运算符[]不会做范围检查。

vector<string>的遍历方式后面再提。

  • 可以用 + 连接字符串
  • 可以用append连接字符串
string s1("good "),s2("morning!");
s1.append(s2);
//good morning
s2.append(s1,3,s1.size());
//morning!d 。

如果3+s1.size()超过了字符串长度,则复制到字符串最后一个字符
  • 比较compare

可以s1.compare(1,2,s3,0,3);比较一部分

  • 字串substr()
s2 = s1.substr(4,5); 
  • 查找find()、rfind()

返回第一次出现的地方(索引),没找到则返回string::npos

rfind()倒查

额外用法:s.find("ll",2)  从下标为2的地方开始查找字符串"ll"

find_first_of("abcd")查找"abcd"中任何一个字符第一次出现的地方

find_last_of()、find_first_not_of()、find_last_not_of()同理

  • s.erase()删除
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
  • s.replace(2,3,"haha")

从下标2开始的3个字符替换为“haha”

  • s.insert()插入

s1.insert(5,s2);

s1.insert(2,s2,5,3)

扫描二维码关注公众号,回复: 6030299 查看本文章
  • s.c_str()转换成char *字符串,末尾有 ‘\0’

s.c_str()返回的是一个 const char *指针,可以用于:

例如printf("%s\n", 此处需要一个char*指针);

注意:尽量使用  char c[20];  strcpy(c,s.c_str());   而不要使用char* c = s.c_str();

因为在s对象被析构之后,c就变成了野指针。

  • s.data()

返回char *指针,并且末尾没有 ‘\0’

猜你喜欢

转载自blog.csdn.net/jitanban0579/article/details/88614452