C++ string vector

3.3.1string容器

string是一个类,内部封装了char*,用来管理这个容器

string类中封装了很多的功能函数,如:find、copy、delete、replace、insert等

不用考虑内存释放和越界问题。

string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心赋值越界取值越界等。

string构造函数

string();//创建一个空字符串 例如:string str;
string(const string& str);//使用一个string对象初始化另一个string对象
string(const char* s);//使用字符串s初始化
string(int n, char c);//使用n个字符c初始化
//string的构造

void test06() {
	//无参构造,创建一个空字符串""
	string str = string();
	//通过一个字符串,构造另外一个字符串
	string str2 = string("hello world");
	//通过一个字符数组,构造一个字符串
	const char* array = "hello world";
	string str3 = string(str2);
	cout << str3 << endl;

	//通过指定数量的指定字符,构造一个字符串"AAAA"
	string str4 = string(5, 'A');
	cout << str4 << endl;
}




int main() {
	test06();
	system("pause");
	return 0;
}

string基本赋值操作

string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s付给当前字符串
stirng& 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 char *s);//将s从start开始n个字符赋值给字符串
void test07() {
	string str;

	//通过=等号进行赋值,等号已经被string进行了运算符重载
	//通过字符串进行赋值
	str = "hello world";

	//通过字符数组进行赋值
	const char* arr = "abc";
	str = arr;
	cout << str << endl;

	//通过字符进行赋值
	str = 'a';
	cout << str << endl;

	//assign
	str.assign("hello world");
	cout << str << endl;

	str.assign(arr);
	cout << str << endl;

	str.assign(8,'a');
	cout << str << endl;
}

string存取字符

char& operator[](int n);//通过[]方式取字符
char& at(int n);//通过at方法获取字符
//string的存取字符
void test08() {
	//通过"下标",从一个字符串中获取到指定位的字符,或者是可以修改指定下标位的字符。
	//char& operator[](int n);//通过[]方式取字符
	//char& at(int n);//通过at方法获取字符
	string str = "hello world";
	cout << str[4] << endl;
	cout << str.at(4) << endl;

	//使用字符引用返回值,存储一下字符串中指定下标位字符的引用
	char& c = str[4];
	//修改引用的值,因为这里引用的是字符数组中的指定下标位的元素,所以这里c发生变更,也会影响到数组中的元素
	c = '!';
	cout << str << endl;

	//注意事项
	//	一旦字符串中的字符数组内存重新分配了,使之前的引用再进行空间访问,可能会出现问题
	//16位
	//c_str:将C++风格的字符串,转成C风格的字符串(返回C++的string类中维护的那个字符数组指针)
	cout << (int*)str.c_str() << endl;
	str = "123456789012345";
	cout << (int*)str.c_str() << 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开始的你个字符连接到当前字符串结尾
string& append(int n, char c);//在当前字符串结尾添加n个字符c
//string拼接
void test09() {
	string str = "hello";

	//+
	//string str1 = str + "world";
	//cout<

	//+=
	//str += "world";
	//cout << str << endl;

	//append
	//string& append(const char* s);//把字符串s连接到当前字符串结尾
	str.append(" world");
	cout << str << endl;//hello world
	//string& append(const char* s, int n);//把字符串s的前面n个字符连接到当前字符串结尾
	str.append(" nihao", 3);
	cout << str << endl;//hello world ni
	//string& append(const string & s);//同operator+=()
	//string& append(const string & s, int pos, int n);//把字符串s中从pos开始的你个字符连接到当前字符串结尾
	str.append("java is the best programming language", 11, 4);
	cout << str << endl;//hello world ni bes

	//string& append(int n, char c);//在当前字符串结尾添加n个字符c
	str.append(5, 'K');
	cout << str << endl//hello world ni besKKKKK;

}

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
//string的查找和替换
void test10() {
	//查找:查找一个字符串或者是一个字符,在指定的字符串中出现的下标,如果找不到返回-1
	//替换:将一个字符串中指定下标范围替换成新字符串

	string str = "C++ is the most popular, most usful programing language in the world";
	//查找
//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第一次出现位置
	cout << str.find("most") << endl;
	cout << str.find("most", 20) << endl;
	int res = str.find("mostmost", 0, 4);
	cout << res << endl;
	cout << str.find('s') << endl;
	//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最后一次出现位置
	cout << str.rfind("most",20) << endl;

	 
	 
	//替换
	//string& replace(int pos, int n, const string & str);//替换从pos开始n个字符为字符串str
	//string& replace(int pos, int n, const char* s);//替换从pos开始n个字符为字符串s
	cout << str.replace(11, 24, "best") << endl;//C++ is the best programing language in the world
	cout << str << endl;//C++ is the best programing language in the world
}

string比较操作

/*
compare函数在>时返回1,<时返回-1,==时返回0.
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的A比小写的a小。
*/
int compare(const string &s)const;//与字符串s比较
int compare(const char *s)const;//与字符串s比较
//sring的比较操作
void test11() {
	//字符传大小比较规则:比较的是字典顺序(更深入来说,就是字符在在字符集中映射的数字)
	// 
	//一次比较字符串中的每一位字符,如果字符相同,继续比较后面的一位字符。直到某一次的比较可以分出大小。
	//字符串可用><>=<===!=来比较
	//		局限性:比较的结果是布尔类型,无法充足的表示每一种比较结果
	//		因此字符串提供compare函数,返回值是一个int类型
	//			1:前面的大于后面的
	//			-1:前面的小于后面的
	//			0:相等
				string str1 = "abc";
	string str2 = "abc";

	//cout << (str1 < str2) << endl;

	cout << str1.compare(str2) << endl;
}

string字串的获取

string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符串组成的字符串

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个字符

string和C语言风格字符串转换

//stirng转char*
string str = "itcast";
const char* cstr = str.c_str();
//char* 转string
char* s = "itcast";
string str(s);

在C++中存在一个从const char到string的隐式类型转换,却不存在从一个string对象到Cstring的自动类型转换。对于string类型的字符串,可以通过cstr()函数返回string对象对应的C_string. 通常,程序员在整个程序中应坚持使用string类对象,直到必须将内容转化为char时才将其转换为C_string.

//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 test13() {
	string str = "HAHAHAHA";

	str.insert(4, "hello");
	cout << str << endl;

	str.insert(4, 5, 'K');
	cout << str << endl;

	//删除
	str.erase(4, 5);
	cout << str << endl;
}

3.3.2vector容器

vector的数据安排及操作方式,与array非常相似,两者唯一差别在于空间的运用的灵活性。Array是静态控件,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据办网新空间,在释放原来的空间。Vector时动态空间,随着元素的加入,他的内部机制就会自动阔充空间以容纳新元素。因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个大块头的array了。

//vector容器遍历
void test14() {
	//1.构造一个vector对象	通过vector无参构造,构造空vector容器
	vector<int> v;
	//2.添加若干个元素
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);

	//3.迭代器:使用普通指针 一次指向vector中每一个元素
	//begin():获取到的是vector容器中的首元素的地址
	//end():获取到的是vector容器中的最后一位元素的下一位的指针
	/*vector::iterator it = v.begin();
	cout << *it << endl;
	it++;
	cout << *it << endl;
	it++;
	cout << *it << endl;*/

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		//直接输出指针指向元素
		//cout << *it << endl;
		//可以通过指针,修改元素
		if (*it == 20) {
			*it = 200;
		}
	}
	//使用迭代器遍历vector容器
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {

		cout << *it << endl;

	}
	//使用迭代器遍历容器的时候可以缩写
	//一次将vector容器的每一个元素,给element赋值
	for (int ele : v) {
		if (ele == 200) {
			ele = 2000;
		}
	}
	for (int ele : v) {
		cout << ele << endl;
	}
	for (int& ele : v) {
		if (ele == 200) {
			ele = 2000;
		}
	}
	for (int ele : v) {
		cout << ele << endl;
	}

	int a = 10;
	int& b = a;//想通过b修改a加&
	b = 100;
}


int main() {
	test14();
	system("pause");
	return 0;
  
  
	//倒序遍历vector
	for (vector<int>::iterator it = v.end(); it != v.begin(); ) {
		it--;
		cout << *it << endl;
	}
}

#include
using namespace std;
int main0() {

system("pause");
return 0;

}

你可能感兴趣的:(c++,开发语言)