6.5 C++ strings(C++字符串)

C风格字符串常见错误:试图去访问数组范围以外的元素;没有使用函数strcpy( )来实现字符串之间的复制;没有使用函数strcmp( )来比较两个字符串 …

C++ 字符串:数据类型不是C++语言固有的一种数据类型;在C++ 中,string 数据类型是由类来定义的;

Remark:字符串比较:直接使用==, <, >,等

6.5.1字符串初始化和赋值

(第10-14行演示了如何用一些相同的字符分配一个C++字符串。可以用两行或多行来为C++字符串赋值。)

空白字符串:只定义,不赋值的字符串。

方法一:string str1;//后续也没有对str1赋值

方法二:string str2="";//两个英文引号内没有任何内容

第33行演示了assign() 把str1字符串的一部分赋值给str5。 str1 是被赋值的源字符串 1 是赋值的起始位置 3 是赋值的字符个数

交换函数(swap

交换字符串str1.swap( str2 ):交换字符串str1和str2

赋值函数(assign

str1.assign(str2,firstposition,lenth);  用str2的子串给str1赋值,即从下标firstposition开始的,长度为lenth的元素为str1赋值

例如:str1=“ABCDEFGH”;  str2.assign(str1,1,3);  则str2为BCD

其他形式:

str1.assign(str2);   用str2为字符串str1赋值

str1.assign( str2 size);  用str2的开始num个字符为字符串str1赋值

str1.assign(num,character);  用num个字符character为字符串赋值.

注意,下标从零开始!!!

6.5.2 字符串串接

第一种方式:直接加,如,str3 = str1 + str2; 或, str3 += " some charactors ";

第二种方式:添加文本函数(append)

str3.append("some charactors");  在字符串str3的末尾添加some charactors

str3.append(str1,index,len);  在字符串str3的末尾添加str中以index下标开始,长度为len的子串

str3.append(num,ch);  在字符串的末尾添加num个字符ch

6.5.3 字符串长度,字符串索引和子串

字符串长度: int  len =str1.length( );

字符串索引:可以用at()函数访问,防止越界。例如:str1.at ( 0 ) = 'A' ; 或 str1.at ( len1 - 1 ) = 'H' ;

类似的,at()也可以用于字符串输出 for ( int i = 0 ; i < len1 ; i++ )  cout << str1.at( i ) << ' ' ;

字符串子串函数(substr)

str1.substr(index,num)返回本字符串的一个子串,从index开始,长num个字符。

备注:如果没有指定,将是默认值 string::npos(string::npos参数 —— npos 是一个常数,用来表示不存在的位置.)

也就是说,substr()函数将简单的返回从index开始的剩余的所有字符。

6.5.4  字符串替换,删除,插入和空字符串

replace()、erase()、insert()

字符串替换函数replace( )

str1.replace( index1,  num1, str2, index2, num2 );

用st2r中的num2个字符(从index2开始)替换字符串中str1的字符,从index1开始,最多num1个字符

str1.replace( index, type num, str2 );

用str2中从index开始的num个字符替换本字符串中的字符,

字符串删除erase( )

str1.erase(pos) 删除pos指向的字符, 返回指向下一个字符的迭代器

str1.erase(start,end) 删除从start到end的所有字符, 返回一个迭代器,指向被删除的最后一个字符的下一个位置

str1.erase()删除str1中的所有内容

可以参考:C++ 中string.erase() 的用法_Scott_dingg的博客-CSDN博客_string.erase

字符串插入insert()

str1.insert(index1,str2,index2,num);在字符串str1下标index1处,插入字符串str2从index2开始,长num个字符的子串

str1.insert(index,str2);在字符串str1下标index处,插入字符串str2

空字符串empty( )

str1.empty()返回值为true,说明是str1空字符串;反之,返回false则说明不是空字符串

6.5.5字符串查找

p = str1.find("some characters"); 返回some characters在字符串中第一次出现的第一个字符的下标,如果没找到则返回-1

p = str1.rfind("some characters"); 从右往左逆向查找some characters在字符串中最后一次出现的位置

p = find_last_of(); 查找最后一个与value中的某值相等的字符

p =find_first_of(); 查找第一个与value中的某值相等的字符

p =find_first_not_of(); 查找第一个与value中的所有值都不相等的字符

p = find_last_not_of(); 查找最后一个与value中的所有值都不相等的字符

6.5.6字符串比较

可以直接用opertors比较,如 ==,!=,<=,>=,<,>

6.5.7字符串插入

cin>>str; 用于读入一个单词到string类型的变量中

getline(cin,str); 用于从输入流cin中读取一行到string类型的变量str中

6.5.8字符串拷贝

str1.copy(str2,len); 将字符串str2复制到字符串str1 中,并覆盖 str1原始字符串

str1.copy(str2,num,index);函数拷贝自己的num个字符到str中(从索引index开始),返回值是拷贝的字符数

str1 = str2;直接用str2给str1赋值


字符串终于完结,真的好多啊555555·~

第6章 字符串(下)——C++字符串的更多相关文章

  1. Windows内核下操作字符串!

    * Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...

  2. Linux下对字符串进行MD5加密

    Linux下对字符串进行MD5加密 比如要用MD5在linux下加密字符串“test",可以使用命令:$ echo -n test|md5sum098f6bcd4621d373cade4e8 ...

  3. C#下JSON字符串的反序列化

    C#下JSON字符串的反序列化,一般都是用newtonsoft.json,比较方便..net当然也有提供相应功能,但觉得比较复杂. 所谓反序列化,就是将一个包含JSON内容的字符串,转换回指定对象(不 ...

  4. js:把字符串转为变量使用; js下将字符串当函数去执行的方法

    1 把字符串当变量使用 通过计算 string 得到的值(如果有的话).该方法只接受原始字符串作为参数 demo: var type = "car"; var newStr = & ...

  5. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串

    import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...

  6. 2019-10-16-WPF-控件-Content-的内容不显示下划线字符串

    title author date CreateTime categories WPF 控件 Content 的内容不显示下划线字符串 lindexi 2019-10-16 09:21:32 +080 ...

  7. Struts2框架学习第二章——Struts2下的HelloWorld

    本章要点 —  Struts 2的下载和安装 — 纯手工创建一个Web应用 — 纯手工创建一个Struts 2应用 — 实现Struts 2的Action — 配置Struts 2的Action — ...

  8. 《Python基础教程》 读书笔记 第五章(下)循环语句

    5.5.1while循环 x=1 while x<=100: print x x+=1 确保用户输入了名字: name="" while not name: name=raw ...

  9. (linux shell)第一章--小试牛刀(下)

    文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...

  10. HTML网页内容转换成字符串(删除从指定字符串到指定字符串)

    背景: 最近遇到个小需求就是将下面字符串去掉无用字符串 <br><br>"你爷爷也喜欢吃鱼嘛."<br><br>我笑了起来,&quo ...

随机推荐

  1. 在node中通过cors跨域。

    cors : 全称 cross origin resource share  跨资源共享 在nodejs 中可以通过在服务器端设置代码如下实现cors跨域 res.setHeader('Access- ...

  2. 前端实现导出excel

    结果: 将网页上拿到的数据导出成excel文件 实现: HTML代码 <div> <button type="button" onclick="expo ...

  3. 在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET

    在k8s 环境下,通过Operator 可以管理Dapr sidecar, 在虚拟机环境下,我们也是非常需要这样的一个管理组件,类似下图:在这张图片中,在上图左面,我们看到了"dapr.ex ...

  4. 解决pycharm的爬虫乱码问题(初步了解各种编码格式)

    Ascii码(American Standard Code for Information Interchange,美国信息互换标准代码):最初计算机只在美国使用时,只用8位的字节来组合出256(2的 ...

  5. MassTransit 入门(一)

    本文地址源码 MassTransit是一个面向.net的免费开源分布式应用程序框架. MassTransit使得创建应用程序和服务变得很容易,这些应用程序和服务利用基于消息的.松散耦合的异步通信来获得 ...

  6. C#语法糖系列 —— 第一篇:聊聊 params 参数底层玩法

    首先说说为什么要写这个系列,大概有两点原因. 这种文章阅读量确实高... 对 IL 和 汇编代码 的学习巩固 所以就决定写一下这个系列,如果大家能从中有所收获,那就更好啦! 一:params 应用层玩 ...

  7. 比 Navicat 还要好用、功能更强大的工具!

    DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议.可以通过官方网站或者 Github 进行下载. 由于 DBeaver 基于 Java 开发 ...

  8. python学习番外篇——字符串的数据类型转换及内置方法

    目录 字符串的数据类型转换及内置方法 类型转换 内置方法 优先掌握的方法 需要掌握的方法 strip, lstrip, rstrip lower, upper, islower, isupper 插入 ...

  9. Annotation(注释) _Override _ Deprecated _ SuppressWarnings

    Deprecated SuppressWarnings 元注解

  10. Java 练手项目

    HotelSystem:https://github.com/misterchaos/HotelSystem(酒店管理系统 Java,tomcat,mysql,servlet,jsp实现,没有使用任何 ...