字符串增删改查

字符串

在c++ 中使用字符串string,需要引入头文件

#include<string>

定义string变量的方法

string a;//字符串为空,""
string b="abc";//字符串为abc
string c=b;//用b对c直接赋值,c的内容是abc
string d(5,'c');//d的内容为ccccc

转换为C风格的字符串

转换函数 c_str(),能够将 string 字符串转换为C风格的字符串,并返回该字符串的 const 指针(const char*)

string path = "D:\\demo.txt";
FILE *fp = fopen(path.c_str(), "rt");

为了使用C语言中的 fopen() 函数打开文件,必须将 string 字符串转换为C风格的字符串。

字符串的拼接

使用++=运算符来直接拼接字符串

+来拼接字符串时,运算符的两边可以都是 string 字符串,也可以是一个 string 字符串和一个C风格的字符串,还可以是一个 string 字符串和一个字符数组,或者是一个 string 字符串和一个单独的字符

#include <iostream>
#include <string>
using namespace std;
int main(){
    string s1 = "first ";
    string s2 = "second ";
    char *s3 = "third ";
    char s4[] = "fourth ";
    char ch = '@';
    string s5 = s1 + s2;
    string s6 = s1 + s3;
    string s7 = s1 + s4;
    string s8 = s1 + ch;
    
    cout<<s5<<endl<<s6<<endl<<s7<<endl<<s8<<endl;
    return 0;
}
//输出结果
first second
first third
first fourth
first @

string 字符串的增删改查

一. 插入字符串

insert() 函数可以在 string 字符串中指定的位置插入另一个字符串

string& insert (size_t pos, const string& str);
//pos 表示要插入的位置,也就是下标;str 表示要插入的字符串,它可以是 string 字符串,也可以是C风格的字符串。
//pos不能越界,范围是0-s.length()
#include <iostream>
#include <string>
using namespace std;
int main(){
    string s1, s2, s3;
    s1 = s2 = "1234567890";
    s3 = "aaa";
    s1.insert(5, s3);
    cout<< s1 <<endl;
    s2.insert(5, "bbb");
    cout<< s2 <<endl;
    return 0;
}
//s1="12345aaa7890"
//s2="12345bbb7890"
二. 删除字符串

erase() 函数可以删除 string 中的一个子字符串

string& erase (size_t pos = 0, size_t len = npos);
//pos的范围为0-s.length()
//pos表示要删除的子字符串的起始下标,len 表示要删除子字符串的长度。如果不指明 len 的话,那么直接删除从 pos 到字符串结束处的所有字符(此时 len = str.length - pos)
//如果 pos 越界,会抛出异常;
//如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。
#include <iostream>
#include <string>
using namespace std;
int main(){
    string s1, s2, s3;
    s1 = s2 = s3 = "1234567890";
    s2.erase(5);
    s3.erase(5, 3);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    cout<< s3 <<endl;
    return 0;
}
s1=1234567890
s2=12345
s3=1234590
三. 提取子字符串

substr() 函数用于从 string 字符串中提取子字符串

string substr (size_t pos = 0, size_t len = npos) const;
//pos 为要提取的子字符串的起始下标,len 为要提取的子字符串的长度。
//如果 pos 越界,会抛出异常;
//如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。
string s = "abcdefg";
string a = s.substr(0, 2);
//a="ab"
四. 字符串查找

string 类提供了几个与字符串查找有关的函数

1) find() 函数

find() 函数用于在 string 字符串中查找子字符串出现的位置

size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
//第一个参数为待查找的子字符串,它可以是 string 字符串,也可以是C风格的字符串。第二个参数为开始查找的位置(下标);如果不指明,则从第0个字符开始查找。
//static const size_t npos = -1;即常量npos定义的值为-1. 但又因为npos 的类型size_t是无符号整数类型,所以npos实际上是一个正数,并且是size_t类型的最大值。
2) rfind() 函数

从后向前查找字符或者子字符串第一次出现的位置。

string s="abababa";
string a="aba";
s.rfind(a,4);//返回4

在这里插入图片描述

此时逆向查找,从下标4开始查找,此时直接匹配,注意,返回的不是2,而是4,

如果匹配不成功,则如下图,返回2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UELmpkOM-1636181492155)(C:\Users\李梦林\AppData\Roaming\Typora\typora-user-images\image-20211106143924363.png)]

3) find_first_of() 函数

find_first_of() 函数用于查找子字符串和字符串共同具有的字符在字符串中首次出现的位置

#include <algorithm>
size_t find_first_of ( const string& str, size_t pos = 0 ) const;
//从pos位置开始查找共有的子字符串
五、字符串替换
//用str替换指定字符串从起始位置pos开始长度为len的字符
string& replace (size_t pos, size_t len, const string& str);
string a="abcd abcd";
a=a.replace(0,a.length(),"aaa");
//用str替换 迭代器起始位置 和 结束位置 的字符
string& replace (const_iterator i1, const_iterator i2, const string& str);
string a="abcd abcd";
a=a.replace(a.begin(),a.end(),"aaa");
//用substr的指定子串(给定起始位置和长度)替换从指定位置上的字符串
string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);
string a="abcd abcd";
string b="abcdefg";
a=a.replace(0,a.length(),b,1,2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值