c++中字符串常见操作

1.字符串赋值

①用等号赋值

string str1 = "hello world";
str1 = "你好,世界";
str = 'h';

在定义字符串时,就可以直接对其进行赋值;后边还可以重新赋值,并且可以赋值单个字符,操作很灵活

string str1;
string str2 = "hello world";
str1 = str2;

还可以用另一个string类型的字符串直接赋值。

②用C语言风格的字符串进行赋值

const char * str1 = "hello world";
string str2(str1);  //str2 = str1 也可以

③拷贝构造

string str1 = "hello world";
string str2(str1);

string库中的内置函数,就等于等号赋值。

④多个重复项构造

string str1(5,'a');  //结果为aaaaa

代表5个a,注意第二个参数必须是char类型,用单引号引着的单个字符。

⑤用函数进行赋值

string str1;
str1.assign("hello");  //str1 = "hello"
str1.assign("hello world",7); //第二个参数代表只要前五个,空格也占一个位置,str1 = "hello w"

string str2 = "abcdefg";
str1.assign(str2); //str1 = "abcdefg"

string str1; 
str1.assign('w',5);  //str1 = "wwwww" ,和上边的那个

注意:用函数赋值时,必须先定义变量,赋值操作不能写在同一行。

下边的这个就不行,是错误的

string str.assign("abf"); //错误写法

2.字符串拼接

①用+进行拼接

string str1 = "hello";
str1 += " world";// str1 = "hello world"

右边也可以用一个string类型进行拼接

string str1 = "hello";
string str2 = " world";
str1 += str2; // str1 = "hello world"

②用函数进行拼接

string str1 = "hello";
str1.append(" world"); //str1 = "hello world"

string str2 = "hello";
str2.append(" world",3);  //str1 = "hello wo",参数3代表只要前3个

string str3 = "hello";
str3.append(" w orld",2,3);  //str1 = "hello or",参数2代表从下标2开始,参数3代表要3个字符

3.字符串查找子串

string str1 = "abcdefdef";
str1.find("def");  //结果是3,从左往右找
str1.rfind("def"); //结果是6,从右往左找
str1.find("hhh");  //结果为-1,没有这个子串结果就是-1

注意:返回的值是子串中第一个字符在原串中的下标

4.字符串替换

string str1 = "abcdssw";
str1.replace(0,2,"1111"); //代表主串从0的位置开始,两个字符被替换掉;此处的结果为1111cdssw

就是把从哪里开始的,往后数几个的部分,替换成括号里边提供的

注意:这3个参数都不能少,如果只想把其中的一个字符换掉,就把第二个参数改为1.

5.字符串比较

主要用于看两个字符串是否相等

string str1 = "hello";
string str2 = "hello";
str1.compare(str2);  //结果为0代表相等,否则为不相等

它的结果可能会大于0或小于0,这个结果的得出与ASCII有关

string str1 = "helpo";
string str2 = "hello";
str1.compare(str2);  //结果不为0,为p-l,两个字符的ASCII值求差

6.字符串存取

string str1 = "hello world";
//①直接用下标的方式
str1[1]; //结果就为e
//②用内置函数
str1.at(1); //结果也为e

7.修改单个字符,只能修改单个字符

想要修改多个,可以用replace进行替换操作

string str1 = "hello world";
//①直接用下标的方式修改
str1[1] = 'x'; //结果就为"hxllo world"
//②用内置函数修改
str1.at(0) = 'k'; //结果为"kxllo world"

8.字符串的插入

string str1 = "hello";
str1.insert(1,"111"); //在1的位置插入,结果为"h111ello"

9.字符串的删除子串操作

string str1 = "hello world";
str1.erase(1,3); //从下标为1的位置起,删除长度为3的子串
//结果为"ho world"

此操作其实也可以直接把想删的地方用空字符替换,方法多样。

10.获取字符串子串

string str1 = "hello world";
str1.substr(1,3); //从下标为1的位置截取长度为3的子串
//结果为ell

以上这些操作可以相互替换,灵活性很强。

  • 12
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于定长顺序存储结构实现对串的赋值、串比较、求子串的位置、串替换等操作。要求所有操作均以函数的形式实现,在主函数调用各个函数实现整体功能。 注意:每一个字符串的第一个元素存放的是该字符串的长度(不包括第一个元素),除串的赋值外,其他所有操作(比较、求子串的位置、串替换)等都不应包含该字符。 1.1.实验1:串赋值函数实现: 按照系统已经定义的函数接口编写函数实体,实现:将输入数组StrInput[]的数据赋值给待赋值数组StrTobeAssigned[],其待赋值数组StrTobeAssigned[0]存放有效数据的长度,StrTobeAssigned[1]之后存放带赋值数据。 具体要求和相关假设为: ① 函数接口定义为:int MyStrAssign(char * StrTobeAssigned, char * StrInput); ② 输入参数:待赋值字符串变量StrTobeAssigned,字符串的期望值StrInput; ③ 输出参数:无; ④ 处理规则及返回值:将StrTobeAssigned[1]及之后的内容赋值为StrInput的有效内容,StrTobeAssigned[0]赋值为StrInput有效字符的长度,并返回1; ⑤ 假设: a)两个字符串均不为空串; b)StrInput存放的是一个完成的字符串(不包含长度); c)赞不考虑输入数据超过数组总长度的情况。 1.2实验2:串替换函数: 按照系统已经定义的函数接口编写函数实体,实现:在主串MainStr查找是否存在某特定子串SubStr1,若存在则将所有的SubStr1替换为新的指定子串SubStr2,函数返回字符串替换的次数。 具体要求和相关假设为: ① 函数接口定义为:int MyStrReplace(char * MainStr, char * SubStr1, char * SubStr2); ② 输入参数:主串变量MainStr,子串变量SubStr1,SubStr2; ③ 输出参数:无; ④ 处理规则及返回值:若主串存在子串,用SubStr2替换主串MainStr出现的所有与SubStr1相同的不重叠的子串,并返回字符串替换的次数;否则返回0。 ⑤ 假设: a)主串和两个子串均不为空串; b)MainStr[0]和SubStr1[0],SubStr2[0]分别存放对应字符串的长度,不用替换该部分。 2.问题分析 (1)根据实验一的内容可知,我们需要通过编写函数实体的形式实现串的赋值操作,主要的思路包括: (a)获得输入字符串的长度len; (b)将输入字符串的长度len赋值给待赋值字符串的第一个元素StrTobeAssigned[0]; (c)依次将输入字符串的数据赋值给待赋值字符串。 (2)根据实验二的内容可知,我们需要通过编写函数实体的形式实现串的替换操作,主要的思路包括: (a)遍历主串MainStr,检查是否存在某特定子串SubStr1; (b)如果存在则找到子串在主串的位置; (c)在主串删除该子串并更新主串长度; (d)在主串插入该子串并更新主串长度; (e)过程记录替换字符串的次数,遍历结束后返回该次数(如果没有替换则为0); 如果有必要,可以使用本实验已经提供的相关函数,如:求子串位置的函数MySubStrIndex(),子串删除函数MyStrDelete()和子串插入函数MyStrInsert()等
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值