设为首页 加入收藏

TOP

c++标准库string的使用完美总结——十分详细,复习学习记忆都可以使用(一)
2023-07-23 13:39:17 】 浏览:384
Tags:string 十分 习学习 都可以

std::string详解

抛弃char*的字符串选用C++标准程序库中的string类。
他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。
更新:使用count进行对string中某字符的统计:count(str.begin(),str.end(),char a)返回值可以使用int接收,包含在库函数algorithm中。
标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比较、连接、遍历、STL算法、复制、赋值等等操作,这个类定义在 头文件中。#include //注意这里不是string.h string.h是C字符串头文件
实现原理

1.声明一个C++字符串,初始化

std::string类的构造函数声明一个字符串变量很简单:string Str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:

  1. string s(); //生成一个空字符串s
  2. string s(str) //拷贝构造函数 生成str的复制品string(const string& str)
  3. string s(const char *s) //将C字符串作为s的初值
  4. string s(const char* cstr, size_type n) //使用字符串str的前n个字符初始化作为字符串s的初值。
  5. string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值
  6. string s(const string& str, size_type pos,strlen) //将字符串str内"始于pos且长度顶多strlen"的部分作为字符串的初值
  7. string s(int num,char c) //生成一个字符串,包含num个c字符
  8. string s(begin,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值,即迭代器间的值。
  • s.~string() //销毁所有字符,释放内存
  • 注意:当构造的string太长而无法表达时会抛出length_error异常
  • 当指定拷贝的长度大于被拷贝字符串的长度时,是将字符串对应位置中剩余的内容全部拷贝。

2.字符串操作函数

1.赋以新值 = ,assign( )

第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。
还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。注意和string的构造初始化赋值等函数基本类似,只是这个是赋予新值。

 s.assign(str); 
 s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串
 s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
 s.assign("gaint"); 
 s.assign("nico",3);//把’n’ ‘I’ ‘c’赋给字符串
 s.assign("nicoafdad",2,5);//从二开始数五个
 s.assign(5,’x’);//把五个x赋给字符串

2.两个字符串关系:交换swap( ) 比较字符串 ==,!=,< , <= , > , >= , ,compare( )

a.swap(b); //结果为 b="12345678"; a="ABCD";swap会导致迭代器失效
C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<"hello")。在使用>,>=,<,<=这些操作符的时候是根据"当前字符特性"将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string ("aaaa") <string(aaaaa)。
另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 〉0-大于 <0-小于。举例如下:

  string字符串使用方法都类似
  string s("abcd");
  s.compare("abcd"); //返回0
  s.compare("dcba"); //返回一个小于0的值
  s.compare("ab"); //返回大于0的值
  s.compare(s); //相等
  auto number = b.compare(0,4,"1234efgh",4,4); //结果为 number=0; //字符串b从下标为0的地方开始的后四个字符是efgh,字符串"1234efgh"从下标为4的字符开始的后4个字符是efgh,所以相等
  s.compare(1,2,"bcx",2); //用"bc"和"bc"比较。

3.添加插入:在尾部添加字符 += , append() ,push_back( ) 插入字符insert( ) 串联字符串 +

append和asign和string初始化都差不多,这个是追加,+=和等于也类似的关系

  s+=str;//加个字符串
  s+="my name is jiayp";//加个C字符串
  s+=’a’;//加个字符
  s.append(str);
  s.append(str,1,3);//不解释了 同前面的函数参数assign的解释
  s.append(str,2,string::npos)//不解释了
  s.append("my name is jiayp");
  s.append("nico",5);
  s.append(5,’x’);
  s.push_back(‘a’);//这个函数只能增加单个字符

也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。

  string a = "1234";
首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数的计数 c++ 下一篇栈——stack的用法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目