c++中string的用法介绍

1. 概述

在C++中,字符串的处理一直是程序员们十分头疼的问题,早期的C++中只有字符指针和字符数组可以用来处理字符串,但是这样的处理方式不够方便且容易出错。引入标准库后,C++中的字符串处理变得异常方便,提高了编程效率。

2. string的基本用法

2.1 string定义

C++中的string定义格式如下所示:

#include

using std::string;

string str = "hello world";

这里的string是一个类,所以需要用类似point和vector等的头文件引用方式来引用和使用它。

2.2 string基本操作

下面对常用的基本操作进行简要介绍:

2.2.1 string赋值

1.使用等于号进行字符串之间的赋值,也可以将字符串直接赋值给string变量:

string str1 = "hello,world";

string str2 = "Hello,World";

str2 = str1;

string str3 = "Hello";

string str4 = str3;

2.使用assign()函数进行字符串赋值,还可以指定起始位置和长度:

string str1 = "hello world";

string str2;

str2.assign(str1);

2.2.2 string比较

1.使用比较运算符进行字符串大小的比较:

string str1 = "hello";

string str2 = "world";

if (str1 > str2)

cout << str1 << endl;

else

cout << str2 << endl;

2.使用compare()函数进行字符串大小的比较,返回值为整型,如下:

string str1 = "hello";

string str2 = "world";

if (str1.compare(str2) == 1)

cout << str1 << endl;

else

cout << str2 << endl;

2.2.3 string从字符串中获取子串

使用substr函数获取指定位置和长度的子串:

string str = "hello world";

string substr = str.substr(0, 5);

cout << substr << endl;

//输出结果为:hello

2.2.4 string查找

1.使用find()函数进行查找,找到返回匹配字符串起始位置,找不到则返回string::npos

string str = "hello world";

string substr = "world";

int pos = str.find(substr);

if (pos != string::npos)

cout << pos << endl;

2.使用rfind()函数进行反向查找,找到返回匹配字符串起始位置,找不到则返回string::npos

string str = "hello world";

string substr = "l";

int pos = str.rfind(substr);

if (pos != string::npos)

cout << pos << endl;

2.2.5 string替换

使用replace()函数进行字符串替换。第一个参数指定替换的起始位置,第二个参数指定替换的长度,第三个参数指定替换的字符串

string str = "hello world";

str.replace(0, 5, "hi");

cout << str << endl;

//输出结果为:hi world

3. string实战应用

3.1 文件读取

下面的示例展示了如何使用string读取文件:

#include

#include

#include

using namespace std;

int main()

{

ifstream fin("input.txt");

if (!fin)

cout << "文件打开失败" << endl;

string str;

while (getline(fin, str))

{

cout << str << endl;

}

fin.close();

return 0;

}

这里使用了getline()函数,它会读取一整行文本,并存储到一个string变量中,如果读取到文件结尾,则返回false。

3.2 字符串分割

下面的示例展示了如何使用string进行字符串分割:

#include

#include

using namespace std;

int main()

{

string str = "hello,world";

string delimiter = ",";

size_t pos = 0;

string token;

while ((pos = str.find(delimiter)) != string::npos)

{

token = str.substr(0, pos);

cout << token << endl;

str.erase(0, pos + delimiter.length());

}

cout << str << endl;

return 0;

}

这里使用了find()函数查找分隔符的位置,如果找到分隔符,则使用substr()函数获取分割后的子串,并输出。然后使用erase()函数将已经输出的部分从字符串中删除。

3.3 正则表达式匹配

C++中提供了库来支持正则表达式的匹配。下面的示例展示了如何使用string和正则表达式来匹配邮箱地址:

#include

#include

#include

using namespace std;

int main()

{

string str = "my email address is anon@anon.com";

regex pattern("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+");

smatch result;

if (regex_search(str, result, pattern))

{

cout << result[0] << endl;

}

return 0;

}

这里使用了regex_search()函数进行正则表达式的匹配,结果存储在smatch类型的result中。如上所示,正则表达式可以用来匹配各种各样的字符串模式。

4. 总结

使用string标准库可以方便地处理字符串,大大提高了程序员的编程效率。C++中string类提供了丰富的接口,如赋值,比较,子串获取,字符串替换等等,可以满足绝大部分字符串处理的需求。这里展示的实际应用中,string可以用作文件读取,字符串分割,正则表达式等等,使其成为C++中不可或缺的一个标准库。

后端开发标签