第6章 字符串(下)——C++字符串
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++字符串的更多相关文章
- Windows内核下操作字符串!
* Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...
- Linux下对字符串进行MD5加密
Linux下对字符串进行MD5加密 比如要用MD5在linux下加密字符串“test",可以使用命令:$ echo -n test|md5sum098f6bcd4621d373cade4e8 ...
- C#下JSON字符串的反序列化
C#下JSON字符串的反序列化,一般都是用newtonsoft.json,比较方便..net当然也有提供相应功能,但觉得比较复杂. 所谓反序列化,就是将一个包含JSON内容的字符串,转换回指定对象(不 ...
- js:把字符串转为变量使用; js下将字符串当函数去执行的方法
1 把字符串当变量使用 通过计算 string 得到的值(如果有的话).该方法只接受原始字符串作为参数 demo: var type = "car"; var newStr = & ...
- 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,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, 字符串内的其他字 ...
- 2019-10-16-WPF-控件-Content-的内容不显示下划线字符串
title author date CreateTime categories WPF 控件 Content 的内容不显示下划线字符串 lindexi 2019-10-16 09:21:32 +080 ...
- Struts2框架学习第二章——Struts2下的HelloWorld
本章要点 — Struts 2的下载和安装 — 纯手工创建一个Web应用 — 纯手工创建一个Struts 2应用 — 实现Struts 2的Action — 配置Struts 2的Action — ...
- 《Python基础教程》 读书笔记 第五章(下)循环语句
5.5.1while循环 x=1 while x<=100: print x x+=1 确保用户输入了名字: name="" while not name: name=raw ...
- (linux shell)第一章--小试牛刀(下)
文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...
- HTML网页内容转换成字符串(删除从指定字符串到指定字符串)
背景: 最近遇到个小需求就是将下面字符串去掉无用字符串 <br><br>"你爷爷也喜欢吃鱼嘛."<br><br>我笑了起来,&quo ...
随机推荐
- input type='file'限制上传文件类型
前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so easy啊,没什么嘛 ...
- EMS邮件统计
前提条件:管理员拥有"Organization Management"权限.并且启用邮件跟踪日志. 1.统计时间段内邮件发送情况 案例任务:统计一段时间内服务器"MAIL ...
- linux 后台运行
一般用 nohup program & 运行状态用cat nohup.txt查询 下面这种关了终端也不会停止 setsid program &>xx.log & 若是不需 ...
- linux中sort、uniq、cut、tr、wc命令的使用
文本处理命令 1.sort命令 使用场景 : 用于将文件内容加以排序(可以和cat一起用) 参数 作用 -n 依照数值的大小排序 -r 以相反的顺序来排序(默认只比较第一个数,-rn是按所有数值比较) ...
- android软件简约记账app开发day04-记账页面条目的代码书写
android软件简约记账app开发day04-记账页面条目的代码书写 在前三天我们完成了基本的界面展示,从今天开始,我们进入到后台逻辑代码的编写中,今天开发记账条目的代码 我们在主页面点击记一笔图标 ...
- Aop踩坑!记一次模板类调用注入属性为空的问题
问题起因 在做一个需求的时候,发现原来的代码逻辑都是基于模板+泛型的设计模式,模板用于规整逻辑处理流程,泛型用来转换参数和选取实现类.听上去是不是很nice! 类目录结构 AbstractTestAo ...
- Ubuntu 16.4安装1050ti显卡驱动问题及解决
不得不说,ubuntu上安装nvidia驱动坑是真的多!!! 本来在之前已经安装好了,从 显卡驱动到cuda再到cudnn去不没问题,就已一次推送而来的显卡驱动更新,把我的环境全部弄坏,为了吸取教训, ...
- 手机USB共享网络是个啥
智能手机一般都提供了USB共享网络的功能,将手机通过USB线与电脑连接,手机端开启『USB共享网络』,电脑就能通过手机上网. 手机端开启『USB共享网络』: 电脑端出现新的网络连接: 通过设备管理器看 ...
- mybaitis查询 (数据库与实体类字段名不相同)
1.这是我的数据库字段名和实体类字段名 2.方法 方法一: 查询的结果标题 会跟实体类的属性一一匹配,一定要一致就算数据库字段和属性不一致,我们可以把查询结果设置一个别名,让别名=属性名 方法二:使用 ...
- iptables系列教程(二)| iptables语法规则
一个执着于技术的公众号 iptables 命令基本语法 " iptables [-t table] command [链名] [条件匹配] [-j 目标动作] 以下是对 iptables 命 ...