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;

結果:
在這裏插入圖片描述

感謝自己的努力拼搏!!老鐵們覺得還不錯的記得點個贊呦!我是航行的小土豆 謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章