天天看點

C++學習(5):字元串string函數用法詳解

前言:

C++中的字元串string很有意思,兼具基礎類型和類類型的特點,也兼具數組和容器的特點。接下來就string的用法以及标準庫提供的函數具體說明。下面的例子從多種使用場景給出示例。

正文:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 1、字元串的定義和指派
	string str = "I am Jimmy";  //可以用等号,因為string類重載了“=”運算符。
	string str2("I am Jimmy");  //可以用string的構造函數定義字元串
	string str3;
	str3.assign("I am Jimmy");  //可以用string類提供的指派函數

	// 2、通路字元串某個位置上的字元
	cout << str[0] << endl;       //數組的方式
	cout << str.at(0) << endl;    //string類提供的通路方式
	cout << str.front() << endl;  //通路第一個位置
	cout << str.back() << endl;   //通路最後一個位置

	// 3、字元串的大小(容量)
	cout << str.size() << "," << str.length() << endl; //傳回源字元串的長度大小,這兩個函數一樣的效果。
	cout << str.max_size() << endl;                    //傳回string對象中可存放的最大字元串的長度。
	cout << str.capacity() << endl;                    //傳回string配置設定的存儲容量
	cout << (str.empty() ? "Y" : "N") << endl;         //判空函數

	// 4、增
	str = "I am Jimmy";
	str.insert(0, "hello everyone, "); //指定下标,插入字元串
	cout << str << " :" << str.size() << endl;
	
	str = "I am Jimmy";
	str.push_back('!');  //固定在末尾加上一個字元
	cout << str << " :" << str.size() << endl;

	str = "I am Jimmy";
	str.append("!!");  //append函數在末尾追加字元串
	cout << str << " :" << str.size() << endl;

	str = "I am Jimmy";
	str.append(1, '!');  //如果追加字元,則需要指定個數
	cout << str << " :" << str.size() << endl;

	// 5、删
	str = "I am Jimmy";
	str.erase(1, 3);  //删除下标1開始,長度3的所有元素
	cout << str << ":" << str.size() << endl;

	str = "I am Jimmy";
	str.erase(str.begin() + 2);  //如果想删除制定位置的一個char,必須要用用疊代器,不能直接制定下标2
	cout << str << ":" << str.size() << endl;

	str = "I am Jimmy";
	str.erase(str.begin() + 1, str.end() - 1);  //用疊代器删除範圍内的所有元素
	cout << str << ":" << str.size() << endl;

	// 6、改
	str = "I am Jimmy";
	str[2] = ' ';  //删除下标1開始,長度3的所有元素
	cout << str << ":" << str.size() << endl;

	// 7、查
	str = "I am Jimmy";
	int position = str.find("yI");  //字元的位置
	cout << position << endl;

	position = str.find("am");     //字元串的位置
	cout << position << endl;

	// 8、替換
	str = "I am Jimmy";
	str.replace(2, 3, "love ");    //原字元串從下标2開始,往後3個元素,替換成參數中的字元串
	cout << str << ":" << str.size() << endl;

	// 9、子串
	str = "I am Jimmy";
	str2 = str.substr(5, 5);    //2個參數,截取下标5,及之後的5個元素
	cout << str2 << ":" << str2.size() << endl;

	str = "I am Jimmy";
	str2 = str.substr(2);    //1個參數,截取下标2及之後的所有元素
	cout << str2 << ":" << str2.size() << endl;

	// 10、疊代器
	str = "I am Jimmy";
	for (string::iterator ite = str.begin(); ite != str.end(); ite++) {
		cout << *ite << endl; // string是容器,當然可以使用疊代
	}

	// 11、查++
	// find函數是比對整個串,而find_first_of是将參數串拆開一一比對
	str = "apple";
	position = str.find_first_of("aeiou");  //簡單的一行就能判斷單詞裡面有沒有元音字母
	cout << position << endl;
}