【C++grammar】string类和array类

目录

  • 1、C++11的string类
    • 1、创建 string 对象
    • 2、追加字符串append函数
    • 3、为字符串赋值assign函数
    • 4、at, clear, erase, and empty函数
    • 5、比较字符串compare()
    • 6、获取子串at() 、substr()函数
    • 7、搜索字符串find()
    • 8、插入和替换字符串insert() 、replace()
    • 9、字符串运算符
    • 10、string_view与string的几点差别
  • 2、C++11的数组类
    • 1. C-Style Array v.s. C++ Style Array (C风格数组和C++风格数组)
      • 1、C Style Array (C++ raw array,也叫做C++原生数组)
      • 2、C Style Array (C++ raw array,也叫做C++原生数组)
    • 2. Create C++ Style Array (创建C++风格数组)
    • 3.std::array的成员函数

C++ 使用 string 类处理字符串

string类中的函数

(1) 构造

(2) 追加

(3) 赋值

(4) 位置与清除

(5) 长度与容量

(6) 比较

(7) 子 串

(8) 搜索

(9) 运算符

1、C++11的string类

1、创建 string 对象

由一个字符串常量或字符串数组创建string对象

string message{ "Aloha World!" };
char charArray[] = {'H', 'e', 'l', 'l', 'o', '\0'};
string message1{ charArray };

2、追加字符串append函数

一系列的重载函数可以将新内容附加到一个字符串中

string s1{ "Welcome" };
s1.append( " to C++" ); // appends " to C++" to s1
cout << s1 << endl; // s1 now becomes Welcome to C++string s2{ "Welcome" };
s2.append( " to C and C++", 3, 2 ); // appends " C" to s2
cout << s2 << endl; // s2 now becomes Welcome Cstring s3{ "Welcome" };
s3.append( " to C and C++", 5); // appends " to C" to s3
cout << s3 << endl; // s3 now becomes Welcome to Cstring s4{ "Welcome" }; 
s4.append( 4, 'G' ); // appends "GGGG" to s4
cout << s4 << endl; // s4 now becomes WelcomeGGGG

3、为字符串赋值assign函数

一系列的重载函数可以将一个字符串赋以新内容

string s1{ "Welcome" };
s1.assign( "Dallas" ); // assigns "Dallas" to s1
cout << s1 << endl; // s1 now becomes Dallasstring s2{ "Welcome" };
s2.assign( "Dallas, Texas", 1, 3 ); // assigns "all" to s2
cout << s2 << endl; // s2 now becomes allstring s3{ "Welcome" };
s3.assign( "Dallas, Texas", 6 ); // assigns "Dallas" to s3
cout << s3 << endl; // s3 now becomes Dallasstring s4{ "Welcome" };
s4.assign( 4, 'G' ); // assigns "GGGG" to s4
cout << s4 << endl; // s4 now becomes GGGG

4、at, clear, erase, and empty函数

(1) at(index): 返回当前字符串中index位置的字符
(2) clear(): 清空字符串
(3) erase(index, n): 删除字符串从index开始的n个字符
(4) empty(): 检测字符串是否为空

string s1{ "Welcome" };cout << s1.at(3) << endl; // s1.at(3) returns ccout << s1.erase(2, 3) << endl; // s1 is now Wemes1.clear(); // s1 is now emptycout << s1.empty() << endl; // s1.empty returns 1 (means true)

5、比较字符串compare()

compare() 函数用于比较两个字符串。它与C语言中的 strcmp() 函数很像。

string s1{ "Welcome" };
string s2{ "Welcomg" };
cout << s1.compare(s2) << endl; // returns -2
cout << s2.compare(s1) << endl; // returns 2
cout << s1.compare("Welcome") << endl; // returns 0

6、获取子串at() 、substr()函数

string s1{ "Welcome" };
cout << s1.substr(0, 1) << endl; // returns W;  从0号位置开始的1个字符
cout << s1.substr(3) << endl; // returns come;  从3号位置直到末尾的子串
cout << s1.substr(3, 3) << endl; // returns com;从3号位置开始的3个字符

7、搜索字符串find()

find() 函数可以在一个字符串中搜索一个子串或者一个字符

string s1{ "Welcome to C++" };
cout << s1.find("co") << endl; // returns 3; 返回子串出现的第一个位置
cout << s1.find("co", 6) << endl; // returns -1 从6号位置开始查找子串出现的第一个位置
cout << s1.find('o') << endl; // returns 4    返回字符出现的第一个位置
cout << s1.find('o', 6) << endl; // returns 9   从6号位置开始查找字符出现的第一个位置

8、插入和替换字符串insert() 、replace()

string s1("Welcome to C++");
s1.insert(11, "Java and ");
cout << s1 << endl; // s1 becomes Welcome to Java and C++string s2{ "AA" };
s2.insert(1, 4, 'B'); //在1号位置处连续插入4个相同字符
cout << s2 << endl; // s2 becomes to ABBBBAstring s3{ "Welcome to Java" };
s3.replace(11, 4, "C++"); //从11号位置开始向后的4个字符替换掉。注意'\0'
cout << s3 << endl; // returns Welcome to C++ 

9、字符串运算符

在这里插入图片描述

string s1 = "ABC"; // The = operatorstring s2 = s1;    // The = operatorfor (int i = s2.size() - 1; i >= 0; i--)cout << s2[i]; // The [] operatorstring s3 = s1 + "DEFG"; // The + operatorcout << s3 << endl; // s3 becomes ABCDEFGs1 += "ABC";cout << s1 << endl; // s1 becomes ABCABCs1 = "ABC";s2 = "ABE";cout << (s1 == s2) << endl; // Displays 0 cout << (s1 != s2) << endl; // Displays 1 cout << (s1 >  s2) << endl; // Displays 0 cout << (s1 >= s2) << endl; // Displays 0 cout << (s1 <  s2) << endl; // Displays 1 cout << (s1 <= s2) << endl; // Displays 1 

10、string_view与string的几点差别

C++中的string类与Java中的String类不同。为了有一个和Java中的String类特性类似的东西,C++17中提供了string_view类。请你查查资料,说说string_view与string的几点差别。
C++的string对象,如果大于默认的字符串长度阀值。对于长度为N的字符串,时间成本为O(n),空间成本是2xS(n);

于是C++17就有了string_view这个标准库的扩展,这个扩展极大地解决了string拷贝的空间成本和时间成本问题。

string_view基本没有涉及内存的额外分配。

string_view 是C++17所提供的用于处理只读字符串的轻量对象。这里后缀 view 的意思是只读的视图。

通过调用 string_view 构造器可将字符串转换为 string_view 对象。string 可隐式转换为 string_view。string_view 是只读的轻量对象,它对所指向的字符串没有所有权。string_view通常用于函数参数类型,可用来取代 const char* 和 const string&。string_view 代替 const string&,可以避免不必要的内存分配。string_view的成员函数即对外接口与 string 相类似,但只包含读取字符串内容的部分。string_view::substr()的返回值类型是string_view,不产生新的字符串,不会进行内存分配。string::substr()的返回值类型是string,产生新的字符串,会进行内存分配。string_view字面量的后缀是 sv。(string字面量的后缀是 s)

string_view的适用场合
(由于string_view对象无法被使用它的函数修改,因此要更新string_view所引用的字符串副本,还是需要修改它所引用的string类型的内部字符串副本。)

字符串查找
遍历字符串
显示字符串

2、C++11的数组类

1. C-Style Array v.s. C++ Style Array (C风格数组和C++风格数组)

1、C Style Array (C++ raw array,也叫做C++原生数组)

特点:

int arr[ ] = { 1, 2, 3 };
arr 可能会退化为指针:void f(int a[]) { std::cout << sizeof(a)/sizeof(a[0]); }
arr 不知道自己的大小: sizeof(arr)/sizeof(arr[0])
两个数组之间无法直接赋值: array1 = array2;
不能自动推导类型:auto a1[] = {1,2,3};

2、C Style Array (C++ raw array,也叫做C++原生数组)

特点;

是一个容器类,所以有迭代器(可以认为是一种用于访问成员的高级指针)
可直接赋值
知道自己大小:size()
能和另一个数组交换内容:swap()
能以指定值填充自己: fill()
取某个位置的元素( 做越界检查) :at()

2. Create C++ Style Array (创建C++风格数组)

#include
std::array< 数组 类型, 数组大小> 数组名字;
std::array< 数组 类型, 数组大小> 数组 名字 { 值1, 值2, …};

限制与C风格数组相同 std::array<int , 10> x;
std::array<char , 5> c{ ‘H’,‘e’,‘l’,‘l’,‘o’ };

3.std::array的成员函数

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六、聚类算法实战

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

超图软件试用许可操作步骤_软件中的操作步骤

超图软件试用许可操作步骤The software comprises of three things: Program code, Documentation, and the Operating Procedures. The Program code is the entire software code. The Documentation is produced while the development of the software itself for the time…

【嵌入式系统】STM32配置FreeRTOS以及利用多线程完成流水灯、按键、蜂鸣器、数码管工作

目录1、利用STM32CubeMX配置FreeRTOS2、完成流水灯、按键、蜂鸣器数码管工作1、在gpio.c和.h文件里面书写并声明按键扫描和led、数码管子程序2、在freertos.c文件里面设置全局变量并且在各自任务中载入程序3、关于FreeRTOS的注意事项1、利用STM32CubeMX配置FreeRTOS 假设我们之…

css模糊_如何使用CSS模糊图像?

css模糊Introduction: 介绍&#xff1a; Sometimes even the professional developers tend to forget the various basic properties which can be applied to solve very simple problems, therefore the fundamentals of developing a website or web page should be very …

七、决策树算法和集成算法

一、决策树算法 Ⅰ&#xff0c;树模型 决策树&#xff1a;从根节点开始一步步走到叶子节点&#xff08;决策&#xff09; 所有的数据最终都会落到叶子节点&#xff0c;既可以做分类也可以做回归 对于分类&#xff1a;是由众数决定的&#xff0c;例如爷爷奶奶妈妈都是负数&…

leetcode 538. 把二叉搜索树转换为累加树 思考分析

题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件&…

SQL中GROUP BY语句与HAVING语句的使用

最近在学习SQL Server相关知识&#xff0c;一直不知道怎么使用GROUP BY语句&#xff0c;经过研究和练习&#xff0c;终于明白如何使用了&#xff0c;在此记录一下同时添加了一个自己举的小例子&#xff0c;通过写这篇文章来加深下自己学习的效果&#xff0c;还能和大家分享下&a…

八、决策树算法实验可视化展示

一、树模型的可视化展示 官网下载安装包 右击管理员身份运行&#xff0c;直接下一步即可。 配置环境变量&#xff1a; 将安装好的可视化软件的bin文件夹路径添加到系统环境变量Path下即可 打开cmd&#xff0c;输入dot -version&#xff0c;出现相关信息即安装成功 二、决策…

机器学习笔记:PCA的简单理解以及应用建议

用notability做的笔记&#xff0c;比较随意&#xff0c;对于第五点的PCA错误使用需要特别强调。 目录1、PCA与线性回归2、PCA主成分数量选择3、压缩重现4、PCA应用建议5、PCA的错误使用1、PCA与线性回归 2、PCA主成分数量选择 3、压缩重现 4、PCA应用建议 5、PCA的错误使用

一、信用卡卡号识别

一、思路分析 大体思路&#xff1a;首先拿到一张银行卡&#xff0c;我们得有银行卡号数字的0-9样式的模板&#xff0c;然后再通过不同数字的轮廓的外接矩形来进行匹配&#xff0c;最终识别出银行卡号所对应的数字。 银行卡数字模板&#xff1a; 银行卡信息&#xff1a; 拿到…

bootstrap网格系统_如何使用Bootstrap网格系统?

bootstrap网格系统In the last article, we learned how to create a simple page of Bootstrap? Now, we will learn what is "Grid System" in Bootstrap and how we can use or implement it in our bootstrap page? As you know bootstrap is a mobile-friendl…

回溯法初步

本文为参考公众号所做的笔记。 代码随想录原文 回溯法本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#xff0c;所以它并不是一个高效的算法。但是由于有些问题本身能用暴力搜出来就不错了&#xff0c;所以回溯法也有很多的应用。 回溯法解决的问题…

二、文档扫描OCR

一、思路分析 首先&#xff0c;拿到一张文档&#xff0c;我们需要对文档进行预处理操作&#xff0c;再进行轮廓检测&#xff0c;因为就算拿到文档轮廓&#xff0c;但是这些轮廓也有可能是歪歪扭扭的&#xff0c;这时候需要通过一系列的透视变换操作&#xff0c;将文档摆正。通…

leetcode 77. 组合 思考分析

目录1、题目2、回溯法思路3、参考其他思路&#xff0c;更深入了解这个问题4、剪枝优化可能需要回顾到的知识文章&#xff1a;1、常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)2、回溯法初步删除vector容器中的对象元素的三种方法:pop_back, erase与…

三、全景拼接

一、项目所涉及到的一些知识点 Ⅰ&#xff0c;BF(Brute-Force)暴力匹配&#xff1a;把两张图像的特征点全部给算出来&#xff0c;然后使用归一化的欧氏距离比较这两张图像上特征点之间的大小关系&#xff0c;越小越相似。 SIFT算法 import cv2 import numpy as np import ma…

leetcode 216. 组合总和 III 思考分析

可能需要回顾的文章; leetcode 77. 组合 思考分析 1、题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 2、递归 这一题和之前…

约束执行区域(CER)

受约束的执行区域 (CER) 是创作可靠托管代码的机制的一部分。CER 定义一个区域&#xff0c;在该区域中公共语言运行库 (CLR) 会受到约束&#xff0c;不能引发可使区域中的代码无法完全执行的带外异常。在该区域中&#xff0c;用户代码受到约束&#xff0c;不能执行会导致引发带…

四、模拟英语四六级答题卡识别阅卷评分

一、思路分析 首先拿到答题卡照片的时候&#xff0c;需要对照片进行一系列预处理操作&#xff0c;通过透视变换将图像摆正方便后续的操作。每一道题五个选项&#xff0c;有五道题&#xff0c;通过字典存放准确答案。没有依次对答题卡进行轮廓检测&#xff0c;这里采用的是正方…

leetcode 17. 电话号码的字母组合 思考分析

题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思考与递归程序 解空间树的宽度是输入数字对应的字符的个数&#xff0c;深度是输入的数字的个数…

BHMS的完整形式是什么?

BHMS&#xff1a;顺势疗法医学和外科学士 (BHMS: Bachelor of Homeopathic Medicine and Surgery) BHMS is an abbreviation of Bachelor of Homeopathic Medicine and Surgery. It is a medical degree program for under graduation in Homeopathy; an alternative move towa…