C++基础知识学习记录—string类

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值