首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用数字提升char_separator

用数字提升char_separator
EN

Stack Overflow用户
提问于 2018-12-07 06:21:21
回答 2查看 180关注 0票数 2

我们是否也可以使用boost/记号器或boost::char_separator来分隔数字?

让我们说,我们有一条线:

代码语言:javascript
复制
1 *1:0 *2:0 0.01

我们可以用分隔符、多个分隔符来分隔上线。

代码语言:javascript
复制
boost::char_separator<char> space_star_sep{" ", ":"};

这将给我代币,如:

代码语言:javascript
复制
1
*1 
:
0
*2
:
0
0.01

如果我使用单个分隔符作为

代码语言:javascript
复制
boost::char_separator<char> space_star_sep{" "};

我会得到:

代码语言:javascript
复制
1
*1:0
*2:0
0.01

是否有任何方法将字符串与分隔符直接拆分为,而不是获取令牌和解析。比方说,如果我想要代币:

代码语言:javascript
复制
1
*1
*2
0.01

我尝试在char_seperator中给出一些通用的东西,比如\d et,但是它们对于char分隔符来说是一个未知的序列。

EN

回答 2

Stack Overflow用户

发布于 2018-12-07 15:03:21

如果您的问题是,可以通过将分隔符字符串":0"传递到char_seperator或类似的函数(例如strtok)来标记字符串吗?

不是的。

根据它们的意图,这些函数只通过使用单个字符作为分隔符或令牌来工作。

票数 0
EN

Stack Overflow用户

发布于 2018-12-07 16:08:22

你在这里想做两件事。

  1. 在空格上标记
  2. 去掉尾随的:0 (或在:上标记每个令牌并获取第一个令牌)

这是两个操作,需要这样执行。

您的char_seperator示例只使用多个候选分隔符执行一次标记化。

听起来,您的尝试是从标记化转向模式匹配,尝试从输入字符串中提取数字的子序列。这很好(并且可能是正则表达式的用例),尽管它与您提供的示例输出不匹配,因为*.都不是数字。

我可能会坚持两个阶段的标记化,尽管您的用例的正则表达式可能看起来有点像这样:

代码语言:javascript
复制
Pattern: /(\*)?(\d+(?:\.\d+)?)(?::0)?(?:\s+|$)/g

Input:   "1 *1:0 *2:0 0.01"

       | Captures:
       +-----+-------
Match: |  A  |  B
-------+-----+-------
 #1    |     |  1
 #2    |  *  |  1
 #3    |  *  |  2
 #4    |     |  0.01

(现场演示)

(免责声明:我们对输入语法和您的期望不太了解,无法保证这是准确的。)

我有意地将'*'字符保留在它自己的捕获中,以便您可以自己处理数字部分,而无需进一步从字符串中提取;也就是说,您可以将捕获B直接传递给std::stod,并使用capture A == "*“作为布尔标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53664298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档