string类

String

C++从C语言继承了用字符数组存放字符串的方式,并且可以使用像strcpy等系统函数来处理字符串,但是这种方式大家应该也感觉不是很方便。数据与处理数据的函数分离开也不符合面向对象的设计思想。

为此C++提供了处理字符串的string类,其中封装了字符串的一些属性和操作字符串的函数。

string类位于C++标准库中。C++从C语言中继承了一些系统函数,另外又自己定义了一些模板和类,这些模板和类逻辑上分为六种类型:输入/输出类、容器类与ADT(抽象数据类型)、存储管理类、算法、错误处理和运行环境支持。这些大家了解下就可以了。

C++标准库中的类的声明分别处于不同的头文件中,我们要使用这些类时就要包含相应的头文件。

但是不同的编译器头文件也不同,VC++ 4.1以前的版本中头文件名的形式为“*.h”,VC++ 4.2版本开始就使用符合ANSI标准的标准C++库,可以在不同的编译器间移植,头文件就不再有.h扩展名了,比如,原来的iostream.h文件的新版本文件名为iostream,但C++标准库还是保留了来自C语言的18个带有.h扩展名的头文件。

我们在软件开发中,可以使用以前的带有.h扩展名的头文件也可以使用新版本的头文件,编译器会自动判断链接哪一个库。

但是注意,不能两种文件混着包含,比如,包含了头文件iostream.h,又包含了新版本头文件string,这种情况是不允许的。

在包含了标准C++库中不带.h扩展名的头文件后,必须加入指定名字空间的语句。例如:

#include <iostream>     // 包含iostream头文件
using namespace std;    // 指定名字空间std

string类封装了字符串的属性和操作,这些属性包括:字符序列、字符序列的长度、一个字符的大小等等,还提供了一些对字符串的操作:查找、分配、连接和追加等。

string类的构造函数

string(); 
// 默认构造函数,创建一个长度为0的字符串
string(const string &ths); 
// 拷贝构造函数
string(const string &ths, unsigned int pos, unsigned int n); 
// 从字符串ths的位置pos(第pos+1个字符)开始取n个字符,用来初始化string类的对象。提示:第i个字符的位置为i-1
string(const char *s, unsigned int n); 
// 用指针s指向的字符串中的前n个字符初始化string类的对象
string(unsigned int n, char c); 
// 用n个重复的字符c来初始化string类的对象

string类的一些常用成员函数

string类有很多成员函数,这里只讲几个常用的成员函数。且称成员函数所属对象为“本对象”,其中存放的字符串为“本字符串”。

string append(const char *s);   
// 将指针s指向的字符串添加到本字符串尾
string assign(const char *s);   
// 讲指针s指向的字符串赋值给本对象
string& insert(unsigned int p0, const char *s);  
// 讲s指向的字符串插入到本字符串的位置p0之前
string substr(unsigned int pos, unsigned int n) const;  
// 从本字符串的位置pos开始取n个字符构成新的字符串对象返回
unsigned int find(const basic_string &str) const;  
// 在本字符串中查找str并返回第一次出现的位置
unsigned int length() const;  
// 返回本字符串的长度
void swap(string &str); 
// 交换本字符串与str的内容
int compare(const string &str) const;  
// 比较本字符串与字符串str的大小。若两个字符串相等则返回0,若本字符串小于str,则返回负数,若本字符串大于str,则返回正数。

两个字符串str1和str2的比较有几点规则:
a.若str1和str2的长度相同,并且字符都相同,则str1与str2相等。
b.若str1和str2的字符不完全相同,就比较第一对不相同的字符的ASCII码,ASCII码较小者所属的字符串就是较小的字符串。
c.若str1的长度n1小于str2的长度n2,并且str1与str2前n1个字符完全相同,则str1小于str2。

string类的操作符

在这里插入图片描述
最后给大家一个string类应用的例子:

#include <string>
#include <iostream>
using namespace std ;
void ShowBoolStr(int n)
{
    cout<<(n? "True": "False")<<endl;
}
int main()
{
    string str1="www.jizhuomi.com";
    string str2="http://jizhuomi.com";
    char s1[ ]="/software";
    char s2[ ]="/internet";
    cout<<"str1为 "<<str1<<endl;
    cout<<"str2为 "<<str2<<endl;
    cout<<"s1为 "<<s1<<endl;
    cout<<"s2为 "<<s2<<endl;
    cout<<"str1的长度:"<<str1.length()<<endl;
    cout<<"str1<s1的结果为 ";
    ShowBoolStr(str1<s1);
    cout<<"str2>=s2的结果为 ";
    ShowBoolStr(str2>=s2);
    str1+=s1;
    cout<<"str1=str1+s1:"<<str1<<endl;
    cout<<"str1的长度:"<<str1.length()<<endl;
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值