C++ STL string

C++ String 輸入帶空格的字符串

string s;
getline(cin,s);

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

/*
string 構造函數:
string();//創建一個空的字符串 例如: string str;
string(const string& str);//使用一個string對象初始化另一個string對象
string(const char* s);//使用字符串s初始化
string(int n, char c);//使用n個字符c初始化

string基本賦值操作:
string& operator=(const char* s);//char*類型字符串 賦值給當前的字符串
string& operator=(const string &s);//把字符串s賦給當前的字符串
string& operator=(char c);//字符賦值給當前的字符串
string& assign(const char *s);//把字符串s賦給當前的字符串
string& assign(const char *s, int n);//把字符串s的前n個字符賦給當前的字符串
string& assign(const string &s);//把字符串s賦給當前字符串
string& assign(int n, char c);//用n個字符c賦給當前字符串
string& assign(const string &s, int start, int n);//將s從start開始n個字符賦值給字符串

*/

void test01()
{
	string str; //默認構造
	string str2(str); //拷貝構造
	string str3 = str;

	string str4 = "abcd";
	string str5(10, 'a');

	cout << str4 << endl;
	cout << str5 << endl;

	//基本賦值
	str = "hello";
	str2 = str4;

	//string& assign(const char *s, int n);//把字符串s的前n個字符賦給當前的字符串
	str3.assign("abcdef", 4);
	cout << str3 << endl;


	//string& assign(const string &s, int start, int n);//將s從start開始n個字符賦值給字符串
	string str6;
	str6.assign(str, 1, 3); //ell ? hel 從0索引

	cout << str6 << endl;
}


/*
string存取字符操作
char& operator[](int n);//通過[]方式取字符
char& at(int n);//通過at方法獲取字符

*/
void test02()
{
	string s = "hello world";

	for (int i = 0; i < s.size();i++)
	{
		//cout << s[i] << endl;
		cout << s.at(i) << endl;
	}
	//[] 和at區別?[]訪問越界  直接掛掉 at會拋出異常

	try
	{
		//cout << s[100] << endl;
		cout << s.at(100) << endl;
	}
	catch (out_of_range & e)
	{
		cout << e.what() << endl;
	}
	catch (...)
	{
		cout << "越界異常" << endl;
	}
}

/*
string拼接操作:
string& operator+=(const string& str);//重載+=操作符
string& operator+=(const char* str);//重載+=操作符
string& operator+=(const char c);//重載+=操作符
string& append(const char *s);//把字符串s連接到當前字符串結尾
string& append(const char *s, int n);//把字符串s的前n個字符連接到當前字符串結尾
string& append(const string &s);//同operator+=()
string& append(const string &s, int pos, int n);//把字符串s中從pos開始的n個字符連接到當前字符串結尾
string& append(int n, char c);//在當前字符串結尾添加n個字符c

string查找和替換:
int find(const string& str, int pos = 0) const; //查找str第一次出現位置,從pos開始查找
int find(const char* s, int pos = 0) const;  //查找s第一次出現位置,從pos開始查找
int find(const char* s, int pos, int n) const;  //從pos位置查找s的前n個字符第一次位置
int find(const char c, int pos = 0) const;  //查找字符c第一次出現位置
int rfind(const string& str, int pos = npos) const;//查找str最後一次位置,從pos開始查找
int rfind(const char* s, int pos = npos) const;//查找s最後一次出現位置,從pos開始查找
int rfind(const char* s, int pos, int n) const;//從pos查找s的前n個字符最後一次位置
int rfind(const char c, int pos = 0) const; //查找字符c最後一次出現位置
string& replace(int pos, int n, const string& str); //替換從pos開始n個字符爲字符串str
string& replace(int pos, int n, const char* s); //替換從pos開始的n個字符爲字符串s

*/

void test03()
{
	//拼接
	string s1 = "我";
	string s2 = "愛北京";
	s1 += s2;
	cout << s1 << endl;
	s1.append("天安門");

	cout << s1 << endl;

	//find查找

	string s = "abcdefg";
	int pos = s.find("bcf"); //找不到返回是 -1
	cout << "pos = " << pos << endl;
	
	int pos2 = s.rfind("bc"); //rfind  和find 結果一樣,內部查找順序相反
	cout << "pos2 = " << pos2 << endl; // 4 2 


	//替換
	string s3 = "hello"; //替換從pos開始n個字符爲字符串str
	s3.replace(1, 3, "1111");
	cout << s3 << endl; // h1111o


}

/*
string比較操作:

compare函數在>時返回 1,<時返回 -1,==時返回 0。
比較區分大小寫,比較時參考字典順序,排越前面的越小。
大寫的A比小寫的a小。

int compare(const string &s) const;//與字符串s比較
int compare(const char *s) const;//與字符串s比較
*/

void test04()
{
	string s1 = "abc";
	string s2 = "abcd";

	if (s1.compare(s2) == 0)
	{
		cout << "s1 等於 s2" << endl;
	}
	else if (s1.compare(s2) == 1)
	{
		cout << "s1 大於 s2" << endl;
	}
	else
	{
		cout << "s1 小於 s2" << endl;
	}

}


/*
string子串:
string substr(int pos = 0, int n = npos) const;//返回由pos開始的n個字符組成的字符串

*/

void test05()
{
	string s1 = "abcde";

	string s2 = s1.substr(1, 3);
	cout << "s2 = " << s2 << endl;

	//需求  查找一個右鍵的 用戶名
	string email = "[email protected]";

	int pos = email.find("@");//8 
	cout << "pos " << pos << endl;

	string usrName = email.substr(0, pos);
	cout << "用戶名爲:" << usrName << endl;
}


/*
string插入和刪除操作:
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n個字符c
string& erase(int pos, int n = npos);//刪除從Pos開始的n個字符

*/

void test06()
{
	string s1 = "hello";
	s1.insert(1, "111");
	cout << s1 << endl; //h111ello

	//刪除 111
	s1.erase(1, 3);
	cout << s1 << endl;

}


/*
string和c-style字符串轉換
*/

void func(string s)
{
	cout << s << endl;
}

void func2(const char * s)
{
	cout << s << endl;
}

void test07()
{
	string s = "abc";
	//string -> const char *

	const char * p = s.c_str();

	func(p); //const char * 隱式類型轉換爲 string

	//const char * -> string 

	string s2(p);
	//func2(s2); //string 不能隱式類型轉換爲 char * 
}

void test08()
{
	string s = "abcdefg";
	char& a = s[2];
	char& b = s[3];

	a = '1';
	b = '2';

	cout << s << endl;
	cout << (int*)s.c_str() << endl;

	s = "pppppppppppppp";

	//a = '1';
	//b = '2';

	cout << s << endl;
	cout << (int*)s.c_str() << endl;

}

/*
寫一個函數,函數內部將string字符串中的所有小寫字母都變爲大寫字母。
*/

void test09()
{
	string s = "abCdEfg";

	for (int i = 0; i < s.size();i++)
	{
		//s[i] = toupper(s[i]);

		//全變小寫
		s[i] = tolower(s[i]);
	}

	cout << s << endl;
}

int main()
{
	//test01();

	//test02();

	//test03();

	//test04();

	//test05();

	//test06();

	//test07();

	//test08();

	test09();
	
	return 0;
}
發佈了64 篇原創文章 · 獲贊 20 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章