6.3 C++修改字符串
参考:http://www.weixueyuan.net/view/6392.html
总结:
string字符串同样可以像字符串数组那样按照下标逐一访问字符串中的每一个字符,string字符串的起始下标仍是从0开始。
erase函数可以删除string类型变量中的一个子字符串。erase函数有两个参数,第一个参数是要删除的子字符串的起始下标,第二参数是要删除子字符串的长度,如果第二个参数不指名的话则是直接从第一个参数获取起始下标,然后一直删除至字符串结束。
insert函数可以在string字符串中指定的位置插入另一个字符串,该函数同样有两个参数,第一个参数表示插入位置,第二参数表示要插入的字符串,第二个参数既可以是string变量,又可以是C风格的字符串。
replace函数可以用一个指定的字符串来替换string类型变量中的一个子字符串,该函数有三个参数,第一个参数表示待替换的子字符串的其实下标,第二个参数表示待替换子字符串的长度,第三个参数表示要替换子字符串的字符串。第三个参数同样可以是string类型变量或C风格字符串。
swap函数可以用于将两个string 类型变量的值互换。
例1:
#include <iostream>
#include <string> using namespace std; int main()
{
string s1 ;
s1 = "";
for(int i=; i<s1.length(); i++)
cout<<s1[i]<<" ";
cout<<endl;
s1[] = '';
cout<<s1<<endl;
return ;
}
在本例中我们定义了一个string类型变量s1,并给该变量赋值"1234567890",之后用for循环逐一输出每一个字符串中的字符。除了能够访问每一个字符外,修改它们同样也是允许的,例如在程序后面s1[5] = '5'语句将第6个字符修改为’5’,最后s1被修改为了"1234557890"。
除了能够逐个的去访问字符串中每一个字符外,系统还提供了一些函数方便我们操作string类型变量。
erase函数可以删除string类型变量中的一个子字符串。erase函数有两个参数,第一个参数是要删除的子字符串的起始下标,第二参数是要删除子字符串的长度,如果第二个参数不指名的话则是直接从第一个参数获取起始下标,然后一直删除至字符串结束。
例2:
#include <iostream>
#include <string> using namespace std; int main()
{
string s1, s2, s3;
s1 = s2 = s3 = "";
s2.erase();
s3.erase(, );
cout<< s1 <<endl;
cout<< s2 <<endl;
cout<< s3 <<endl;
return ;
}
程序最终运行结果:
1234567890
12345
1234590
当然,在使用erase函数时,在第一个参数没有越界的条件下,第二个参数可能会导致需要删除的子字符串越界,但实际上是不会的,函数会从以下两个值中取出一个最小值作为待删除子字符串的长度:
- 第二个参数的实参值;
- 字符串长度减去第一个参数的实参值。
其实说的简单一些,待删除字符串最多删除至字符串结尾。当然如果第一个参数直接越界了,那么函数执行会抛出异常的。
函数insert可以在string字符串中指定的位置插入另一个字符串,该函数同样有两个参数,第一个参数表示插入位置,第二参数表示要插入的字符串,第二个参数既可以是string变量,又可以是C风格的字符串。
例3:
#include <iostream>
#include <string> using namespace std; int main()
{
string s1, s2, s3;
s1 = s2 = "";
s3 = "aaa";
s1.insert(, s3);
cout<< s1 <<endl;
s2.insert(, "aaa");
cout<< s2 <<endl;
return ;
}
本例最终运行结果:
12345aaa567890
12345aaa567890
insert函数的第一个参数同样有越界的可能,如果第一个参数越界,则函数会运行异常。
replace函数可以用一个指定的字符串来替换string类型变量中的一个子字符串,该函数有三个参数,第一个参数表示待替换的子字符串的其实下标,第二个参数表示待替换子字符串的长度,第三个参数表示要替换子字符串的字符串。第三个参数同样可以是string类型变量或C风格字符串。
例4:
#include <iostream>
#include <string> using namespace std; int main()
{
string s1, s2, s3;
s1 = s2 = "";
s3 = "aaa";
s1.replace(, , s3);
cout<< s1 <<endl;
s2.replace(, , "aaa");
cout<< s1 <<endl;
return ;
}
程序运行结果如下:
12345aaa0
12345aaa0
同样的,该函数会有溢出的问题,如果第一个参数越界则会抛出异常。在第一个参数没有越界的前提下,第二个参数如果导致越界,则会选择以下两个值中的最小值作为待替换子字符串的长度:
- 第二个参数的实参值;
- 字符串长度减去第一个参数的实参值。
其实说白了,这个也就是说最多到字符串结尾的意思,这个与erase函数相同。
swap函数可以用于将两个string 类型变量的值互换,其使用方式见例5。
例5:
#include <iostream>
#include <string> using namespace std; int main()
{
string s1 = "string";
string s2 = "aaaaaa";
s1.swap(s2);
cout<< s1 <<endl;
cout<< s2 <<endl;
return ;
}
程序运行结果如下:
aaaaaa
string
6.3 C++修改字符串的更多相关文章
- python中修改字符串的几种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符.因此改变一个字符串的元素需要新建一个新的字符串.常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用join组 ...
- python学习:修改字符串大小写
修改字符串大小写 函数:title()字符串首字母大写,upper()字符串全部大写,lower()字符串全部小写. 代码举例: name = "ada lovelace"prin ...
- 4. python 修改字符串实例总结
4. python 修改字符串实例总结 我们知道python里面字符串是不可原处直接修改的,为了是原来的字符串修改过来,我们有一下方法: 1.分片和合并 >>> a='abcde' ...
- 在Linux中批量修改字符串的命令
昨天一个朋友忽然问我,在Linux下如何批量修改字符串,当时瞬间懵逼了,完全想不起来....... 今天特意的重温了一下Linux下的一些常用命令,并将这个遗忘的批量修改字符串的命令记录下来(资料来自 ...
- StringBuilder修改字符串内容,增,删,改,插
package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...
- Go 修改字符串中的字符(中文乱码)
问题复现:修改字符串的第一个中文 先对原字符串做切片,然后进行拼接,得到新的字符串 func ModifyString(str string) string { tempStr := str[1:] ...
- String与StringBuffer和StringBuilder的根本区别(String为什么无法修改字符串长度)
从网上看了很多的信息,说的大部分是关于final修饰的原因,却没有详细的解释!根据自己收集的资料,跟大家分享一下我的观点(有错请指正).1.我们都知道在修改字符串长度的时候,StringBuffer和 ...
- 修改字符串 ToCharArray()
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 修改字符串中特定的内容,用于OpenRecovery Script
下面的是实例内容 目标是把OpenRecovery Script输入的内容进行修改 当有下面的输入:(作用是安装/emmc目录下面的update-signed.zip 刷机包) install /em ...
- Python初学之使用方法修改字符串的大小写
对于字符串,可执行的最简单的操作之一是修改其中单词的大小写. titile()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写: name.py name = "linda l ...
随机推荐
- JS中如何生成全局变量
JS中如何生成全局变量 一.总结 一句话总结:在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量 在函数内没用var声明的一般为全局变量 1.js中的函数中的this指向的是谁? ...
- Spring Boot设置值:分别用@ConfigurationProperties和@Value给属性设值及其区别
@ConfigurationProperties给属性映射值编写JavaBean/** 将配置文件application.properties中配置的每一个属性值映射到当前类的属性中:* @Confi ...
- Ruby 基础教程 第二部分 Ruby 的基础 第4章
第二部分 Ruby 的基础 第4章~第6章 这一部分是 Ruby 编程需要遵守的规则. 第四章 对象,变量与常量 对象 & 类 对象的常见种类: 数值对象 字符串对象 数组.散列对象 正则表达 ...
- Getting Started with Processing 第四章总结
为什么要使用变量: 我们使用变量的一个重要原因就是避免变成过程中的重复工作,如果你重复使用某一个数字超过了一次,就可以考虑使用一个变量来代替它,这样你的程序会更加通用并且易于更新. 定义变量 定义变量 ...
- [Win10]安装msi时2503,2502错误及其解决
简述 刚安装了win10系统,在安装TortoiseGit和TortoiseSvn时,这两个软件是.msi后缀的安装文件,在点击安装时老是提示2503,2502错误,因此无法安装上 搜索了下一般都提到 ...
- 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单
jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...
- 「THUWC 2017」在美妙的数学王国中畅游
这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了.
- SQLServer2012数据库降级至SQLServer2008R2的方法
一. 背景 因为对方的客户的服务器安装的数据版本2012,公司开发同事需要客户数据库的备份数据,但是公司数据版本是2008R2的,无法还原. 由于2012备份无法直接还原至2008R2(MSSQ ...
- 2018 USP Try-outsF - Optimizing Transportation in Portugal
题意:给你一副无向图,求使s到t删掉一条的最短路最大的长度 题解:先预处理s,t到每个点的最短路,二分答案,对于一条边,如果选中这条边,那么对于s->u+u->v+v->t或者s-& ...
- python-flask-SQLAlchemy
SQLAlchemy 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使 ...