●string基本概念
■本质 string是c++风格的字符串,而string本质上是一个类 ■string和char*区别 char*是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器 ■特点 string类内部封装了很多成员方法 (例如:查找find,拷贝copy,删除delete,替换replace,插入insert) string管理char*所分配的内存,不需要担心复制越界取值越界等,由类内进行负责
●string构造函数
构造函数原型:
▲ string() //创建一个空的字符串
▲string(const char* s)//使用字符串s初始化
▲string(const string& str)//使用一个string对象初始化另一个string对象
▲ string(int n,char c)//使用n个字符c初始化
#include<iostream> #include<string> using namespace std; void text() //测试代码 { string s1; cout << "s1= "<<s1 << endl; const char* s = "hello world"; string s2(s); cout << "s2= " << s2 << endl; const string& str=s2; string s3(str); cout << "s3= " << s3 << endl; string s4(10, 'a'); cout << "s4= " << s4 << endl; } int main() { text(); }
●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 string& s) //把字符串s赋给当前字符串
▲string& assign (const char* s,int n) //把字符串s的前n个字符赋给当前的字符串
▲string& assign (int n,char c) //用n个字符c赋给当前字符串
#include<iostream> #include<string> using namespace std; void text() { string str1; str1 = "hello world"; cout << "str1= " << str1 << endl; string str2; str2= str1; cout << "str2= " << str2 << endl; string str3; str3= 'c'; cout << "str3= " << str3 << endl; string str4; str4.assign("hello world"); cout << "str4= " << str4 << endl; string str5; str5.assign(str4); cout << "str5= " << str5 << endl; string str6; str6.assign("hello world", 5); cout << "str6= " << str6 << endl; string str7; str7.assign(10, 'a'); cout << "str7= " << str7 << endl; } int main() { text(); }
●string字符串拼接
拼接函数原型:
▲string& operator+=(const char* str) //重载+=操作符
▲string& operator+=(const char c) //重载+=操作符
▲string& operator+=(const string& str) //重载+=操作符
▲string& append(const char* s) //把字符串s接连到当前字符串结尾
▲string& append(const char* s,int n) //把字符串s的前n个字符连接到当前字符串结尾
▲string& append(const string &s) //同operator+=(const string& str)
▲string& append(const string &s,int pos,int n) //字符串s中从pos开始的n个字符连接到字符串结尾
#include<iostream> #include<string> using namespace std; void text() { string str1 = "你好"; str1 += "世界"; cout << "str1= " << str1 << endl; string str2 = "你好"; str2 += 'a'; cout << "str2= " << str2 << endl; string str3 = ""; str3 += str1; cout << "str3= " << str3 << endl; string str4 = "hello"; str4.append("world"); cout << "str4= " << str4 << endl; string str5 = "hello"; str5.append("world", 5); cout << "str5= " << str5 << endl; string str6 = ""; str6.append(str5); cout << "str6= " << str6 << endl; string str7 = ""; str7.append(str6, 0, 10); cout << "str7= " << str7 << endl; } int main() { text(); }
●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最后一次出现位置
▲int replace(int pos,int n,const string& str); //替换从pos开始n个字符为字符串str
▲int replace(int pos,int n,const char* s); //替换从pos开始的n个字符为字符串s
#include<iostream> #include<string> using namespace std; void text1() //查找 { string str1 = "helloworld"; //find 从左往右查找 int pos1 = str1.find("o"); cout << "pos1= " << pos1 << endl; //rfind 从右往左查找 int pos2 = str1.rfind("o"); cout << "pos2= " << pos2 << endl; } void text2() //替换 { string str2 = "helloworld"; str2.replace(1,3,"111"); cout << "str2= " << str2 << endl; } int main() { text1(); text2(); }
●string字符串比较
比较方式:
▲字符串比较是按字符的ASCII码进行比较的
= 返回 0
> 返回 1
< 返回 -1
比较函数原型:
▲int compare(const string& str) //与字符串str比较
▲int compare(const char* s) //与字符串s比较
#include<iostream> #include<string> using namespace std; void text() { string str1 = "hello"; string str2 = "helloworld"; if (str1.compare(str2) == 0) { cout << "str1=str2" <<endl; } else if (str1.compare(str2) > 0) { cout << "str1>str2" << endl; } else { cout << "str1<str2" << endl; } } int main() { text(); }
●string字符存取
函数原型:
▲char& operator[ ](int n) //通过[ ]方式获取字符
▲char& at(int n) //通过at方法获取字符
#include<iostream> #include<string> using namespace std; void text() { //用[ ]来获取字符,并且用[ ]来进行修改 string str1 = "hello"; for (int i = 0; i < str1.size(); i++) { cout << str1[i] ; } cout << endl; str1[0] = 'a'; cout << str1 << endl; //用at来获取字符,并且用at来进行修改 string str2 = "hello"; for (int i = 0; i < str2.size(); i++) { cout << str2.at(i); } cout << endl; str2.at(0) = 'a'; cout << str2 << endl; } int main() { text(); }
●string插入和删除
函数原型:
▲string& insert(int pos,const char* s) //插入字符串
▲string& insert(int pos,const string& str) //插入字符串
▲string& insert(int pos,int n,char c) //在指定位置插入n个字符
▲string& erase(int pos,int n=npos) //删除从pos开始的n个字符
#include<iostream> #include<string> using namespace std; void text() { string str1 = "hello"; str1.insert(5,"world"); //在hello第五个字符后插入字符串world cout << "str1= " << str1 << endl; str1.insert(5, 1, 'x'); cout << "str1= " << str1 << endl; //在hello在五个字符后插入字符x str1.erase(5, 6); cout << "str1= " << str1 << endl; //删除hello第五个字符后的内容 } int main() { text(); }
●string字串
函数原型:
▲string substr(int pos=0,int n=npos) const; //返回由pos开始的n个字符组成的字符串
#include<iostream> #include<string> using namespace std; void text() { string str1 = "hello"; string str2 = str1.substr(1, 3); cout << "str2 = " << str2 << endl; } int main() { text(); }