您的位置:首页 > 编程语言 > C语言/C++

C++ string简介及常见用法

2015-10-13 21:22 267 查看
C++ String

写算法之余也插播最近一直没有停止学习C++,以前也用但是始终不是那么深入。

言归正传。

1概述

标准库类型string表示可变长的字符序列,使用前需要包含string头文件,并且string定义在命名空间std中。事实上,string类是basic_string<char>的一个typedef,即有下述语句:

typedef basic_string<char> string;

string类对象提供类似于标准容器的操作,不过是针对字符(char),例如在一些代码中可以看到对string对象调用size()方法来获取对象大小,它与length()方法的效果是一样的。

string s=”hello”
int len = s.size();
//len=5


关于string类的定义可以参考:
http://www.cplusplus.com/reference/string/string/
2.构造函数(提供6个构造函数)

a) string(const char*s)

将string对象初始化为s

例如:

string s(“hello”);
cout<<s<<endl;
//hello


b) string(size_type n,char c)

以n个字符c来初始化string的对象。

例如:

string s(5,’c’);
cout<<s<<endl;
//ccccc


c) string (const string& str, size_t pos=0, size_t len = npos)

拷贝构造函数,也可以指定索引位置开始

例如

string s1(“hello”);
string s2(s1);
//hello
string s3(s2,3);
//lo
注:索引值从0开始,这里的npos为构造函数参数,表示直到string对象的结尾。如果给定参数表示从pos开始子串的长度

string s("hello");
string s1(s,0,3);
cout << s1 << endl;
//hel


d) string()

默认构造函数,创建一个长度为0的string对象

例如:

string s;
cout<<s.size();
//0


e) string(const char*s,size_type n)

将string对象初始化为s指向的前n个字符,即使超过了其长度(但是结果会出现乱码)

f) template<class Iter>

string (Iter begin,Iter end)

注:范围是[begin,end),开区间不包括end

之前提到过string类提供类似容器的操作,所以可以进行如下初始化:

string s("hello");
string s1(s.begin()+3,s.begin()+5);
//lo
string s2(s.begin(),s.end());
//hello


3.操作符重载

这里重载了+,+=,<等符号,这个用的比较熟,就不多说了

4.find方法

提供find函数,但是有一点需要非常注意的就是下面一个表达式:

std::string::npos

这个值的定义如下:

static const size_t npos = -1

表示size_t的最大值。这个值是-1的原因是因为size_t表示无符号整数类型。

我们通常结合使用find()和npos来查询子串是否在母串中出现,这里如果不清楚size_t的类型及为什么npos=-1那么只需要记住,使用如下代码来做没找到匹配的判断:

if (str.find("abc") == string::npos) 
{ 
//... 
}


5.获取子串substr()

string substr (size_t pos = 0, size_t len = npos) const;


第一个参数表示子串的起始位置,第二个参数表示子串长度,如果没有给出第二个参数,将默认一直到母串尾。

参考:
https://www.byvoid.com/blog/cpp-string
写的非常详细。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: