string实际上是C++内置的一个类,内部对char *进行了封装,不用担心数组越界问题,string类中,除了上课讲解的函数外,还有很多函数可以使用,可以自行查阅文档。
构造函数原型:
string(); //创建一个空的字符串 例如: string str;
string(const char* s); //使用字符串s初始化
string(const string& str); //拷贝构造函数
string(int n, char c); //使用n个字符c初始化
string(char *str,int n);//保留前n个字符组成字符串
常用函数
str.size() //取字符串的长度
str.length() //同上取字字符串的长度
str.empty() //判断字符串是否为空
str1==str2 //判断字符串是否相等
字符串的追加
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个字符连接到字符串结尾
取字符
char& operator[](int n); //通过[]方式取字符
char& at(int n); //通过at方法获取字符
插入
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
删除
string& erase(int pos, int n = npos); //删除从Pos开始的n个字符
string& substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串。注意接收!!
替换
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串
#include<iostream>#include<string.h>using namespace std;
int main(){//复习之前讲的string函数string str1 = "admin";char str2[23]="9999";cout << str1.at(0) <<endl;cout << str1[0] << endl;cout << "字符串长度0" << str1.size() << endl;cout << "字符串长度" <<str1.length() <<endl;//字符串的遍历for(char c:str1){cout << c << endl;}cout << "*****" << endl;for(int i=0;i<str1.size();i++){cout << str1[i] << endl;}//string实际上是C++内置的一个类,内部对char *进行了封装,不用担数组越界问//类里面有很多方法string str3 = "welcome"; //隐式调用构造函数cout << str3 << endl;string str4("hello");//显示调用构造函数cout << str4 << endl;// 创建一个堆内存对象string *str5 = new string("world");cout << *str5 << endl;delete str5;string str6(str4);//调用拷贝构造函数cout << str6 << endl;string str7(3,'a');//使用3个字符初始化字符串cout <<str7 <<endl;string str8("ASDFFGGG",3);//保留3个字符组成字符串cout << str8 << endl;cout << str8.empty() << endl; //判断字符串是否为空cout << (str7 == str8) << endl;//判断字符串是否相等//字符串的追加string str9("qqqq");string str10("mmmmm");str9+=str10;cout << str9 << endl;str9+="hhhhhh";cout << str9 << endl;//字符追加str9+='u';cout << str9 <<endl;char *str11 = "99999";str9 += str11;cout << str9 <<endl;//字符串的拼接string str12("aaaa");str12.append("wwwww");cout << str12 <<endl;//将字符串的前n个字符拼接到目标字符串的结尾//参数1 从哪个字符串 里选取字符进行拼接//参数2 选取前几个字符str12.append("werttyu",3);cout << str12 << endl;//将字符串的s中从某个字符开始的n个字符拼接到目标字符串的结尾//参数1 从那个字符串里选取字符进行拼接//参数2 从哪开始//参数3 拼接几个字符str12.append("mnbvc",1,3);cout << str12 << endl;//插入//参数1 从哪开始插//参数2 插入什么string str13="asdf";str13.insert(2,"nnn"); //在指定位置插入字符串cout << str13 << endl;//asnnndf//删除(截取)//参数1 从哪开始删除(截取)//参数2 删除(截取)几个字符string str14="asdfg";cout << str14.erase(2,3) << endl;//"as"string str15="nhytgbvfr";cout << str15.substr(2,4) << endl;//"ytgb"//替换//参数1 从哪开始替换//参数2 替换几个字符//参数3 替换为什么string str16="mnbvc";cout << str16.replace(0,3,"kkk") << endl; //"kkkvc"return 0;
}
通过string复习运算符重载
#include <iostream>
#include <cstring>
using namespace std;class String{
private:string str;
public:String(const string &s); //构造函数//友元运算符重载friend String operator +(const String &s1,const String &s2);friend bool operator >(const String &s1,const String &s2);friend bool operator <(const String &s1,const String &s2);friend bool operator ==(const String &s1,const String &s2);//成员函数运算符bool operator !=(const String &other);//赋值运算符String& operator =(const String &s);// 类型转换operator string(); //String转string//成员函数string get_str() const;
};//构造函数
String::String(const string &s)
{str = s;
}//类型转换
String::operator string()
{return str;
}//访问属性str
string String::get_str() const
{return str;
}///字符串赋值
String& String::operator =(const String &s)
{str=s.str;return *this;
}//字符串长度判等
bool String::operator !=(const String &other)
{return str.size() != other.str.size();
}//字符串拼接
String operator +(const String &s1,const String &s2)
{return s1.str+s2.str;
}
//字符串长度 >
bool operator >(const String &s1,const String &s2)
{return s1.str.size()>s2.str.size();
}
//字符串长度 <
bool operator <(const String &s1,const String &s2)
{return s1.str.size()<s2.str.size();
}//字符串长度 ==
bool operator ==(const String &s1,const String &s2)
{return s1.str.size()==s2.str.size();
}
int main()
{String s1("qwe");String s2("qwe");String s3("QWE");String s4("1234");String s5("12");String s6("5678");String s7("34");if(s1>s2)cout<<"正确"<<endl;elsecout<<"错误"<<endl;if(s1>s3)cout<<"正确"<<endl;elsecout<<"错误"<<endl;if(s1>s4)cout<<"正确"<<endl;elsecout<<"错误"<<endl;cout<<(s2+s3).get_str()<<endl;s2=s3;cout<<s2.get_str()<<" "<<s3.get_str();return 0;
}