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;
結果:
感謝自己的努力拼搏!!老鐵們覺得還不錯的記得點個贊呦!我是航行的小土豆 謝謝!