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;
结果:
感谢自己的努力拼搏!!老铁们觉得还不错的记得点个赞呦!我是航行的小土豆 谢谢!