当前位置: 首页 > article >正文

c++---------------------------string

从今天开始我们就开始学c++的容器了就不需要我们造轮子了

1.为什么学习string类

1.1c语言中的字符串

C 语言中,字符串是以 '\0' 结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列
的库函数,但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户
自己管理,稍不留神可能还会越界访问
2.标准库中的string类
2.1
string类的文档介绍
在使用string的时候必须包含头文件和using namespace std等;
2.2auto和范围for
auto 关键字
在早期 C/C++ auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,后来这个
不重要了。 C++11 中,标准委员会变废为宝赋予了 auto 全新的含义即: auto 不再是一个存储类型
指示符,而是作为一个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期
推导而得
auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须加 &
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际
只对第一个类型进行推导,然后用推导出来的类型定义其他变量
auto 不能作为函数的参数,可以做返回值,但是建议谨慎使用
auto 不能直接用来声明数组
// 不能做参数
void func2(auto a)
{}
// 可以做返回值,但是建议谨慎使用
auto func3()
{
return 3;
}
int a = 10;
auto b = a;
auto c = 'a';
auto d = func1();
// 编译报错:rror C3531: “e”: 类型包含“auto”的符号必须具有初始值设定项
auto e;

范围for

范围for可以用到数容器上进行遍历
范围 for 的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到
int array[] = { 1, 2, 3, 4, 5 };
// C++98的遍历
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
array[i] *= 2;
}
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
cout << array[i] << endl;
}
// C++11的遍历
for (auto& e : array)
e *= 2;

2.3string常用的接口

string的初始化

string s1{ 1,23,46 };
string s2 = { 1,2,3,4,5 };

这两种初始化都是可以的当然也可以那s1来初始化s2

string s2(s1);

2.3.1size()接口

这个就是见词知意

就是用来求数组的大小的比如

之前我们还需要去用sizeof现在用了容器我们可以调用容器里面的函数直接使用

2.3.2capacity()

这个是用来返回空间总大小的

2.3.3empty()

这个是用来判断字符串是否为空是返回true,否则返回false

2.3.4 clear()

这个是用来清除有效字符

2.3.5 reserve 

这个是用来为字符串预留空间比如

string s1{ 1,23,46 };
cout << s1.capacity();

这个空间大小是15

要是利用reserve

string s1{ 1,23,46 };
s1.reserve(20);
cout << s1.capacity();

他这个开辟空间就只有第一次是2被增容其他都是1.5扩大这个就是31

2.3.5 resize()

将有效字符的个数该成 n 个,多出的空间用字符 c 填充
string s1("hello world");
s1.resize(20,'x');
for (auto e : s1)
{
	cout << e << " ";
}

2.3.6 operator[]()

返回 pos 位置的字符, const string 类对象调用
std::string str ("Test string");
  for (int i=0; i<str.length(); ++i)
  {
    std::cout << str[i];
  }

2.3.7 begin()和end()

begin 获取一个字符的迭代器 + end 获取最后一个字符下一个位
置的迭代器
例如:
string s1("hello world");


string::iterator it = s1.begin();
while (it != s1.end())
{
	cout << *it << " ";
	it++;
}

2.3.8 rbegin()和rend()

这个和上面差不多就是一个从前往后一个是从后往前

2.3.9 push_back()

这个就很简单了和我们之前写顺序表的时候一样这个就是尾插、

2.3.10 append()

这个就是在字符串后追加一个字符

string s1("hello world");

s1.append("hello");
string::iterator it = s1.begin();
while (it != s1.end())
{
	cout << *it << " ";
	it++;
}

2.3.11operator+=

在字符串后追加字符串 str
std::string name ("John");
  std::string family ("Smith");
  name += " K. ";         // c-string
  name += family;         // string
  name += '\n';

2.3.12 find和npos

从字符串 pos 位置开始往后找字符 c ,返回该字符在字符串中的
位置
string s1("hello world");

size_t f1 = s1.find("x");
if (f1 != string::npos)
{
	cout << s1[f1] << endl;
}
else
{
	cout << "没找到" << endl;
}

重点就这么多有兴趣的同学可以去官网查一下其他的使用


http://www.kler.cn/a/457141.html

相关文章:

  • 十个Scala的小知识
  • Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length
  • 蓝牙|软件 Qualcomm S7 Sound Platform开发系列之初级入门指南
  • CPT203 Software Engineering 软件工程 Pt.5 软件测试(中英双语)
  • Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...
  • HTTPS验证流程
  • 深入解析JVM中对象的创建过程
  • 用 Python 从零开始创建神经网络(十八):模型对象(Model Object)
  • 隨筆20241226 ExcdlJs 將數據寫入excel
  • C# winform 报错:类型“System.Int32”的对象无法转换为类型“System.Int16”。
  • WPF编程excel表格操作
  • PDB数据库解析:
  • C 语言中 strlen 函数的深入剖析
  • leetcdoe 1670.设计前中后队列
  • opencv与pyqt6结合例子
  • 用VBA自动更正错误的注释引用序号
  • python圣诞节简单寻宝小游戏
  • Unity功能模块一对话系统(2)打字机淡入效果
  • 喜报 | 擎创科技入围上海市优秀信创解决方案
  • Rancher V2.9.0 Docker安装教程
  • 神经网络入门实战:(二十二)只训练 (多层网络的) 指定层 / (单层网络的) 指定参数
  • 青少年编程与数学 02-005 移动Web编程基础 06课题、响应式设计
  • Web 漏洞之 CSRF 漏洞挖掘:攻防深度剖析
  • SelectionArea 实现富文本
  • 【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文
  • 【13】MySQL如何选择合适的索引?