文章

C++处理字符串的方法

1.引言

这篇文章的由来是在项目中遇到了wstring,之前听说过C++对字符串的处理很繁琐,没有一个好用的,所以现在先简单总结下C++中对字符串的处理方法

下面会介绍C语言的char*,C++标准库的string,wstring,stringstream,Boost库中的split函数,C++17引入的string_view类

注意C++中没有split,但是可以通过stringstream和getline函数配合来实现类似split功能,另外,从C++20开始,标准库中提供了ranges,有专门的split view。如果你有boost库,也可以用boost库中的split函数

2.C风格字符串

这是一种最基本的字符串处理方式,它是使用null字符\0终止的一维字符数组。例如,你可以这样定义和初始化一个C风格字符串:char ch[6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\\0’};。然后,你可以使用C语言中的字符串处理函数(如strcpy(),strcat(),strlen()等)来操作这些字符串。

3.C++标准库中的string类

这是一种更高级的字符串处理方式。string类提供了许多方便的方法和运算符重载,使得字符串操作变得更加简单和安全。例如,可以使用+运算符来连接两个字符串,使用==运算符来比较两个字符串是否相等,使用.size()方法来获取字符串的长度等等。

4.C++标准库中的stringstream类

这是一种特殊的字符串处理方式。stringstream类可以将字符串看作流,从而可以使用«和»运算符来进行输入和输出操作。

在C++中,stringstream是一种特殊的流类,它允许将字符串作为输入和输出流进行处理1。这使得我们可以像处理流对象(如cin或cout)一样处理字符串。stringstream主要与一个字符串缓冲区一起工作,但没有真正的I/O通道。

stringstream的速度之所以快,主要有以下几个原因:

1.内存操作:与文件I/O相比,内存操作通常更快,因为它们不需要磁盘访问或网络通信。由于stringstream在内存中操作字符串,所以它比那些涉及到磁盘I/O的操作更快。 2.数据类型转换:stringstream提供了一种方便的方式,可以将字符串与其他基本类型进行转换、拼接、解析等操作。这使得数据类型之间的转换更加高效。 3.解析输入:使用stringstream可以方便地解析输入。例如,你可以使用它来计算字符串中的单词数量或打印字符串中各个单词的频率。

本文由作者按照 CC BY 4.0 进行授权