c++ 之字符串补充篇

string篇之补充

.c_str() 与 .data()

简述:

c++17之前:

通过.c_str()方法可得到一个const char的指针指向str储存字符的内存空间
通过.data()方法可得到一个const char
的指针指向str储存字符的内存空间

c++17之后:

通过.c_str()方法可得到一个const char的指针指向str储存字符的内存空间
注意: 通过.data()方法可得到一个char
的指针指向str储存字符的内存空间

代码:

	
    string str{ "aaabbb" };
    const char* strA = str.c_str();
    //c++17之前
    //char* strB= (char*)str.data(); //需要强转
    //c++17之后
    char* strB= str.data(); //直接返回就是char*
    cout << (int)strA << "  " << (int)strB << endl;  //指向的地址相同

结果:
在这里插入图片描述
这里补充一下: 如何打印出中英混合的string的长度呢?
这里给出代码(思考交给你们):

int main()
{
    string str{ "航行aaa土豆" };
    int length{};
    for (int i = 0; str[i]; i++)
    {
        if (str[i] < 0)i++;
        length++;
    }
}

结果:
在这里插入图片描述

std::stringstream 字符串流

需包含头文件: #include< sstream >

简述: 与cout类似,cout是流向屏幕打印出来,而string流肯定是让字符串留进去一段内存;

代码:

    std::stringstream ss;  //定义一个string流
    ss << "123" << "航行的土豆" << "你真帅!"; //往流内放东西
    string str = ss.str(); //从流内拿东西
    cout << str;

结果:
在这里插入图片描述

compare()

使用1:

代码:

	string strA{ "abcd" };
	if (!strA.compare("abcd"))  //若比较相等,则返回0
		cout << "strA=abcd" << endl;
	else 
		cout << "strA!=abcd" << endl;

结果:
在这里插入图片描述
使用2:

代码:

	string strA{ "abcd efgh" };
	//第一个参数表示从下标几开始比较
	//第二个参数表示比较几个字符
	//待比较字符串
	string strA{ "abcd efgh" };
	if (!strA.compare(5,4,"efgh"))  //依然是比较,如果一样返回0
		cout << "strA[5]开始4个=efgh" << endl;
	else 
		cout << "strA[5]开始4个!=efgh" << endl;

结果:
在这里插入图片描述

使用3:

代码:

	string strA{ "abcd efgh" };
	string strB{ "111efgh" };
	//第一第二第三参数类似
	//第四个参数为第三个参数从哪一个下标开始比较
	//第五个参数为第三个参数截取几个
	if (!strA.compare(5,4,strB,3,4))
		cout << "strA和strB都有efgh" << endl;
	else 
		cout << "strA和strB不都有efgh" << endl;

结果:
在这里插入图片描述

find()查找

语法:

1、.find(要搜索的东西,开始搜索的下标);

2、 找到则返回找到的字符串首元素下标,否则返回std::string::npos

使用:

代码:

	string strA{ "abcd efgh11111" };
	string strB{ "efgh" };
	int Index = strA.find(strB,3);
	if(Index != string::npos)  
		cout << "找到了,下标为" << Index << endl;
	else 
		cout << "未找到" << endl;

结果:
在这里插入图片描述

rfind()查找

区别对比:

与find()不同的是从尾部开始查找,返回第一个找到的下表,没有找到则返回std::string::npos

代码:

	string strA{ "abcd efgh1ef11" };
	string strB{ "ef" };
	int Index = strA.rfind(strB);  //从尾部开始查找,
	if (Index != string::npos)
		cout << "找到了,下标为" << Index << endl;
	else
		cout << "未找到" << endl; 

结果:
在这里插入图片描述

insert之插入()

语法:

1、.insert(待插位置,待插入字符串)

2、.insert(待插位置,待插入字符个数,待插入的字符)

3、insert(待插位置,待插入字符串,待插长度)

4、insert(待插位置,待插入字符串,待插入字符串起始下标,待插长度)

代码:

使用1:

	string str{ "111222333" };
	str.insert(3, "444");
	cout << str;

结果:
在这里插入图片描述
使用2:

	string str{ "111222333" };
	str.insert(3,3,'a');
	cout << str;

结果:
在这里插入图片描述
使用3:

	string str{ "111222333" };
	str.insert(3,"bbbb",2);
	cout << str;

结果:
在这里插入图片描述
使用4:

	string str{ "111222333" };
	str.insert(3,"bbee",2,2);
	cout << str;

结果:
在这里插入图片描述

感谢自己的努力拼搏!!老铁们觉得还不错的记得点个赞呦!我是航行的小土豆 谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值