当前位置:网站首页 > 技术博客 > 正文

string拆成数组



如:

 

我们如何将以上字符串按照某种分隔符( ,,),将其分割成四个子串,其值分别为 “This” “is” “a” “test” 。

这里我们只需要用到 (字符串输入流) 构造字符串流,然后从字符串流中按照一定的格式读取数据即可。

通常我们使用 cin 从流中读取数据,而我们也可以使用 getline 读取,而后者在读取时可以选择接受的数据格式,其函数原型如下:

 

 因此,我们可以按照此方式设计一个C++中的string split函数。

 

如此,我们就设计出了我们的Stringsplit() 函数。该函数有以下 2 种语法格式

 

 以上,我们简单的设计了一种C++中的分割字符串的函数,下面来看一个测试用例:

 
 

find函数原型: 

 

参数:
str - 要搜索的 string , pos - 开始搜索的位置
返回值
找到的子串的首字符位置,或若找不到这种子串则为 npos 。

substr函数原型: 

 

参数:
pos - 要包含的首个字符的位置 ,count - 子串的长度
返回值
含子串 [pos, pos+count) 的 string 。

由以上两个函数我们便可以设计出我们的Stringsplit()来。同时,因为find()函数查找的可以是字符串,因此我们的分隔符可以是单个的字符,也可以是一个字符串。 

 

下面是一个测试用例:

 
 
 

参数:
str - 指向要记号化的空终止字节字符串的指针
delim - 指向标识分隔符的空终止字节字符串的指针
返回值:
指向下个记号起始的指针,或若无更多记号则为空指针。

需要注意的是,该函数使用一个全局的静态变量来保存每次分割后的位置,因此在多线程中是不安全的,这里我们也可以选择使用它的线程安全版本

 
 

如此,我们的使用 strtok 版本的Stringsplit() 就完成了。不过,我们使用这种方法实现的字符串分割函数只能根据字符来分割,而我们传入的参数是字符串类型,这样可能会对函数的使用这造成误导(注:参数传入字符串用的双引号,传入字符用的单引号),因此我们也可以使用下面的方法封装一个参数是字符类型的函数。

 

 下面给出一个测试用例,我们分别使用单/双引号传入分割的限定字符。

 

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 

而在C++的正则中,把这种操作称为Tokenize分词(或者叫切割)。这种操作刚好可以满足我们的需求,用模板类regex_token_iterator<>提供分词迭代器,可以完成字符串的分割。

 

测试用例:

 
 

 

版权声明


相关文章:

  • spi接口的使用方法2024-12-03 17:30:05
  • 指标体系构建方法有哪些?2024-12-03 17:30:05
  • 什么是私人dns模式2024-12-03 17:30:05
  • java多线程编程实例2024-12-03 17:30:05
  • python虚拟环境 windows环境搭建2024-12-03 17:30:05
  • 苹果备忘录夜间模式2024-12-03 17:30:05
  • java抽象类什么意思2024-12-03 17:30:05
  • webhook作用2024-12-03 17:30:05
  • 归并排序算法python2024-12-03 17:30:05
  • java字符串初始化的几种方式2024-12-03 17:30:05