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;
else
cout<<"错误"<<endl;
if(s1>s3)
cout<<"正确"<<endl;
else
cout<<"错误"<<endl;
if(s1>s4)
cout<<"正确"<<endl;
else
cout<<"错误"<<endl;
cout<<(s2+s3).get_str()<<endl;
s2=s3;
cout<<s2.get_str()<<" "<<s3.get_str();
return 0;
}