string和char*的区别
- char*是一个指针。
- string是一个类,是一个char*类型的容器。
=.= string管理char*所分配的内存,不用担心复制越界或取值越界等,由类内部进行负责。
string构造函数
- string(); //创建一个空字符串,如:string str;
string(const char* s); //使用字符串s对其初始化 - string(const string& str); //使用一个string对象初始化另一个string对象
- string(int n, char c); //使用n个字符c初始化
string赋值
- string& operator=(const char* s); //char*类型字符串赋值给当前字符串
string str1;
str1="blogger is very beautiful!";
cout << "str1 = " << str1 << endl;
- string& operator=(const string &s); //把字符串s赋给当前的字符串
string str2;
str2=str1;
cout << "str2 = " << str2 << endl;
- string& operator=(char c); //字符赋值给当前字符
string str3;
str3='a';
cout << "str3 = " << str3 << endl;
- string& assign(const char *s); //把字符串s赋给当前字符串
string str4;
str4.assign("blogger is a cute girl!");
cout << "str4 = " << str4 << endl;
- string& assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串
string str5;
str5.assign("blogger is a cute girl!",10);
cout << "str5 = " << str5 << endl;
- string& assign(const string &s); //把字符串s赋给当前字符串
string str6;
str5.assign("blogger is a cute girl!");
cout << "str5 = " << str5 << endl;
- string& assign(int n, char c); //用n个字符c赋给当前字符串
string str7;
str6.assign(4,'w');;
cout << "str6 = " << str6 << endl;
字符串拼接
- string& operator += (const char* str); // 重载+=操作符
- string& operator += (const char c); // 重载+=操作符
- string& operator += (const string& str); // 重载+=操作符
- string& append(const char* s); //把s连接到当前字符串结尾
string str1 ="I";
str1 += " LOVE NS";
string str2 = " link";
str1 += str2;
cout << "str1 = " << str1 << endl;
- string& append(const char* s, int n); //把s的前n个字符连接到当前字符串结尾
str1.append(" I LOVE LINK",6);
cout << "str1 = " << str1 << endl;
- string& sppend(const srting &s); //同第三个
string str3 = "I";
str3.append(" love");
cout << "str3 = " << str3 << endl;
- string& append(const string &s, int pos, int n); //s中从pos开始第n个字符连接到字符串结尾
str1.append(str2,2,4);
cout << "str1 = " << str1 << endl;
查找和替换
查找
- int find(const string& str, int pos = 0) const; //查找str第一次出现的位置,从pos开始找
- int find(const char* s, int pos = 0) const; //查找s第一次出现的位置
string str1="abcdefg";
int pos = str1.find("def");
cout << "pos = " << pos << endl;
//如果没有找到则输出-1
- int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
string str1="abcdefg";
int num = str1.find("ef",0,1);
cout << "num = " << num << endl;
- int find(const char c, int pos = 0) const; //查找字符c第一次出现的位置
- int rfind(const string& str, int pos = npos) const; //查找str最后一次位置
- int rfind(const char* s, int pos = npos) const; //查找s最后一次位置
- 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 str1="sbcdefg";
str1.replace(1,3,"2333");
cout << "str1 = " << str1 << endl;
比较
利用ASCII码进行判断
= 返回 0 > 返回 1 < 返回 -1
- int compare(const string &s) const;
- int compare(const char* s) const;
string str1="hello";
string str2="world";
if (str1.compare(str2) == 0){
cout << str1 << "=" << str2 << endl;
}
else if (str1.compare(str2) > 0){
cout << str1 << ">" << str2 << endl;
}
else {
cout << str1 << "<" << str2 << endl;
}
//输出-1
字符存取
- char& operator[ ](int n); //通过[]方式取字符
string str="hello";
for(int i = 0; i < str.size(); i++){
cout << str[i] << " ";
}
- char& at(int n); //通过at方式取字符
for(int i = 0; i < str.size(); i++){
cout << str.at(i) << " ";
}
子串获取
- string substr(int pos = 0; int n = npos) const; //返回由pos开始的n个字符组成的字符串
string str = "hello";
string subStr = str.substr(1,3);
cout << "subStr = " << subStr << endl;
//输出ell
插入和删除
- string& insert(int pos, const char* s); //插入字符串
string str = "hello";
str.insert(1,"2333");
cout << str << endl; //输出 h2333ello
- string& insert(int pos, int n, char c); //在指定位置插入n个字符c
- string& erase(int pos, int n = npos); //删除从pos开始的n个字符
string str = "hello";
str.insert(1,"2333");
str.erase(1,4);
cout << str << endl;//输出 hello