谈谈C++中的string

  在C++中相较C语言多了一个很重要的数据类型,那就是string,接下来我们看看string的特点及使用。

string类:可以把string看成是一个特殊的容器,里面装的是字符

#include <iostream>
#include <map>
using namespace std;
int main()
{
    string str1="yesterday once more";
    string str2("my hear will go on");
    string str3(str1,6);
    string str4(str1,6,3);
    char ch_music[]={"Roly-Poly"};
    string str5=ch_music;
    string str6(ch_music);
    string str7(ch_music,4);
    string str8(10,'i');
    string str9(ch_music+5,ch_music+9);
    cout<<"str1="<<str1<<endl;
    cout<<"str2="<<str2<<endl;
    cout<<"str3="<<str3<<endl;
    cout<<"str4="<<str4<<endl;
    cout<<"str5="<<str5<<endl;
    cout<<"str6="<<str6<<endl;
    cout<<"str7="<<str7<<endl;
    cout<<"str8="<<str8<<endl;
    cout<<"str9="<<str9<<endl;
    return 0;
}

2.赋值、拼接字符串
string 重载了= + +=等多种运算符,让字符串组合拼接更简单

#include <iostream>
#include <map>
using namespace std;
int main()
{
    string str="a woman appreciates";
    string str2=" a man who can make her laugh ";
    string strlove=str+str2;
    cout<<"strlove="<<strlove<<endl;
    str.push_back('!');
    cout<<"str="<<str<<endl;
    str.append("-阿拉丁");
    cout<<"str="<<str<<endl;
    str.assign("dreams come true");
    cout<<"str="<<str<<endl;
    str.insert(16,"!!!");
    cout<<"str="<<str<<endl;
    return 0;
}

3.访问字符操作
string 可以按数组方式,以下标来访问,还可以用at()函数访问指定的字符

#include <iostream>
#include <map>
using namespace std;
int main()
{
    string str="iphone 7";
    cout<<str[2]<<endl;
    cout<<str.at(5)<<endl;
    string stuff;
    getline(cin,stuff);
    cout<<"stuff="<<stuff<<endl;
    getline(cin,stuff,'!');//输入一行字符,赋值给stuff,以'!'结束
    cout<<"stuff="<<stuff<<endl;

    return 0;
}

4.可以把string理解成一个特殊的容器,可以使用STL接口

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string str;
    str.push_back('Q');
    str.push_back('A');
    str.push_back('B');
    string::iterator itstr=str.begin();
    for(;itstr!=str.end();itstr++)
        cout<<*itstr<<" ";
    cout<<endl;
    sort(str.begin(),str.end());//排序
    for(itstr=str.begin();itstr!=str.end();itstr++)
        cout<<*itstr<<" ";
    cout<<endl;
    return 0;
}

  最后我们来自己编写一个my string类。

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class String
{
    public:
        // String s1 ; String s1("qwerty");
        String(const char *str=NULL);//默认构造函数
        String(const String &str);//复制构造函数
        ~String();//析构函数
        String operator+(const String &str);//字符串连接
        String &operator=(const String &str);//字符串赋值
        bool operator==(const String &str);//判断是否字符串相等
        int Length();//获取字符串长度
        friend ostream &operator<<(ostream &o,const String &str);//重载输出运算符<<
        String Sonstr(int begin,int end);//获取子字符串(begin...end-1)
    private:
        char *addstr;

};
String::String(const char *str)
{
    if(str==NULL)//String s1;
    {
        addstr=new char[1];
        addstr[0]='\0';
    }
    else// String s1("qwertyu")
    {
        addstr=new char[strlen(str)+1];
        strcpy(addstr,str);
    }
}
//String s2(s1);
String::String(const String &str)
{
    addstr=new char[strlen(str.addstr)+1];
    strcpy(addstr,str.addstr);
}
String::~String()
{
    delete [] addstr;
}
//s3=s1+s2   
String String::operator+(const String &str)
{
    String res;
    delete[] res.addstr; //释放原有的空间
    res.addstr=new char[strlen(addstr)+strlen(str.addstr)+1];
    strcpy(res.addstr,addstr);
    strcpy(res.addstr+strlen(addstr),str.addstr);
    return res;
}
//s2=s1  
String &String::operator=(const String &str)
{
    if(addstr==str.addstr)
        return *this;
    delete [] addstr;
    addstr=new char[strlen(str.addstr)+1];
    strcpy(addstr,str.addstr);
    return *this;
}
//s2==s1
bool String::operator==(const String &str)
{
    return strcmp(addstr,str.addstr)==0;
}
//s2 strlen(s2);
int String::Length()
{
    return strlen(addstr);
}
//cout<<str<<endl;
ostream &operator<<(ostream &o,const String &str)
{
    o<<str.addstr;
    return o;
}
//s1="qwertyu"
//    3  6    4     6-3+1    新空间下标 :0 1 2 3
String String::Sonstr(int begin,int end)
{
    String res;
    delete [] res.addstr; //释放原有空间
    res.addstr=new char[end-begin+1];//重新申请内存
    for(int i=0;i+begin<end;i++)
        res.addstr[i]=addstr[begin+i];
    res.addstr[end-begin]='\0';
    return res;
}

int main()
{
    String s1="abcd";
    String s2="abcd";
    cout<<s1<<(s1==s2?"==":"!=")<<s2<<endl;

    String s3="hello";
    String s4="world";
    cout<<s3+s4<<endl;
    cout<<(s3+s4).Sonstr(2,7)<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
C++string类型是C++标准库的一部分,用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库对string类也有着很好的支持,并且string类还与C语言的字符串之间有着良好的接口。 在C++,可以通过insert方法将一个字符串插入到另一个字符串的指定位置。例如,在引用的示例代码,我们可以看到如何使用insert方法将字符串" good."插入到字符串"I am"的第4个位置,结果为"I am good."。 此外,还可以将int类型转换为string类型。C++有两种常见的方法可以实现这个转换。第一种方法是使用stringstream类,通过将int类型的数据写入stringstream对象,再通过调用stringstream对象的str()方法获取转换后的string类型数据。示例代码如引用所示。第二种方法是使用to_string函数,将int类型的数据直接转换为string类型。示例代码如引用所示。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++string类用法简介](https://blog.csdn.net/liitdar/article/details/80498634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值