目录

  • 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的成员函数


【C++grammar】string类和array类相关推荐

  1. JAV API 之 --- StringBuffer类、Array类、基本类型包装类

    JAVA API 之 - StringBuffer类.Array类.基本类型包装类 StringBuffer类: 概念引入: 前面我们对字符串进行操作,一旦定义字符串之后,其长度是不可变的,如果对字符 ...

  2. C#中Array类精讲

    文章目录 一.Array类概念 二.Array类属性 三.Array类方法 一.Array类概念 Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义.Array 类提供了各 ...

  3. 【Java5】String类,StringBuilder类,ArrayList类,Object类(toString,equals,hashCode)

    文章目录 1.String类:字符串常量在Java中不属于基本数据类型, 而是引用/类类型 1.1 使用:new String(...) 1.2 判断:equals函数是用来比较两个对象是否相等 1. ...

  4. C#编程(三十三)----------Array类

    Array类 创建数组 Array intArray1 = Array.CreateInstance(typeof(int), 5); for (int i = 0; i < 5; i++) { ...

  5. JAVA的String、StringBuilder、StringBuffer、包装类、日期Date类、枚举类(Enumeration)

    主要内容: String类 字符串构造器的用法 String中的常用方法 String类源代码 String字符串各种拼接方式的效率比较 包装类 日期Date Date方法 getTime 日期格式化 ...

  6. java学习笔记(十)----String类和StringBuffer类

    ***String类和StringBuffer类 -------------------------- String类对象中的内容一旦被初始化就不能再改变 StringBuffer类用于封装内容可以改 ...

  7. Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(一)

    作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 博客:http://blog.csdn.net/zhangerqing(转载请说明出处) ...

  8. String类和StringBuffer类的区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  9. JAVAAPI之STRING类和STRINGBUFER类

    1.Stirng类的初始化 范例:String name="梁东振"; 2.String类的常见操作 -----------字符串的基本操作------------------ 范 ...

最新文章

  1. Go 学习笔记(66)— Go 并发同步原语(sync.Mutex、sync.RWMutex、sync.Once)
  2. Linux文本三剑客之sed
  3. Java多线程 - 控制线程
  4. MYSQL、SQL在LIKE里传的参数没有赋进去的原因
  5. 【线上分享】华为云RTC服务架构及应用实践
  6. KDB支持单步调试功能(ARM架构)
  7. 鸿蒙手表esim,鸿蒙手表终于来了!或将支持 eSIM,实现独立通话
  8. Web前端笔记-使用@media(媒体查询)展示及隐藏div
  9. 2020年,图机器学习将走向何方?
  10. PAT (Basic Level) 1004. 成绩排名 (20)
  11. sysbench的框架实现介绍 1
  12. java自学能学会吗_Java自学能学会吗?Java新手学习路线
  13. SQL 的 REGEXP
  14. 工业物联网与人工智能合体之后 竟把魔爪第一个伸向了她……
  15. 网上下载图片去水印的方法
  16. 冰点还原安装了找不到图标,或许该这样!
  17. 产品温度冲击检测 VS 实际使用寿命换算详解
  18. throw 关键字,throw 必须写在方法体中,并且 throw new xxxException的话,如果是运行时的异常可以不用管,如果是编译的异常需要进行处理
  19. 应用fiddler,使用har2case 将api参数转成yaml格式
  20. 付子玉:丁香园医疗领域图谱的构建与应用

热门文章

  1. html中给div设置的属性怎么样才能拿得到_HTML与CSS结合的三种方式:优先级比较...
  2. 服务器物理部署拓扑图,【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(五)-物理服务器路由方案及配置...
  3. Django学习---原生ajax
  4. jQuery 遍历 each()方法
  5. vue路由跳转报错解决
  6. Jquery中如何获取元素的文本,值,属性和内容
  7. 写出完美CSS代码的5个重要方面
  8. PostgreSQL 9.6 keepalived主从部署
  9. Web工程师必备的43款可视化工具
  10. jquery的动画学习--jquery权威指南