C++ string简介及常见用法

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

写的非常详细。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的string是一个非常常用的字符串类,它提供了许多方便的方法来处理字符串。下面是一些C++ string常见用法: 1. 创建string对象: 可以使用以下方式创建一个string对象: ```cpp std::string str; // 创建一个空字符串 std::string str = "Hello"; // 创建一个包含初始值的字符串 std::string str("Hello"); // 使用构造函数创建字符串 ``` 2. 获取字符串长度: 可以使用`length()`或`size()`方法获取字符串的长度: ```cpp std::string str = "Hello"; int len = str.length(); // 或者使用 str.size(); ``` 3. 字符串连接: 可以使用`+`运算符或`append()`方法将两个字符串连接起来: ```cpp std::string str1 = "Hello"; std::string str2 = "World"; std::string result = str1 + " " + str2; // 使用 + 运算符 std::string result = str1.append(" ").append(str2); // 使用 append() 方法 ``` 4. 字符串比较: 可以使用`==`、`!=`、`<`、`>`、`<=`、`>=`等运算符来比较两个字符串的大小: ```cpp std::string str1 = "Hello"; std::string str2 = "World"; if (str1 == str2) { // 字符串相等 } else if (str1 < str2) { // str1 小于 str2 } else { // str1 大于 str2 } ``` 5. 字符串查找和替换: 可以使用`find()`方法查找子字符串在字符串中的位置,使用`replace()`方法替换字符串中的子字符串: ```cpp std::string str = "Hello World"; int pos = str.find("World"); // 查找子字符串的位置 str.replace(pos, 5, "C++"); // 替换子字符串 ``` 6. 字符串切割: 可以使用`substr()`方法从字符串中提取子字符串: ```cpp std::string str = "Hello World"; std::string sub = str.substr(6, 5); // 提取子字符串,从位置6开始,长度为5 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值