如何在C ++中标记字符串?

比尔蜥蜴

Java有一个方便的split方法:

String str = "The quick brown fox";
String[] results = str.split(" ");

有没有一种简单的方法可以在C ++中做到这一点?

康拉德·鲁道夫

C ++标准库算法非常普遍地基于迭代器而不是具体的容器。不幸的是,这使得很难split在C ++标准库中提供类似于Java的函数,即使没有人认为这样做会很方便。但是它的返回类型是什么?std::vector<std::basic_string<…>>也许可以,但是随后我们被迫执行(可能是多余的和昂贵的)分配。

取而代之的是,C ++提供了多种方法来基于任意复杂的定界符来分割字符串,但是它们都没有像其他语言那样被很好地封装。大量方法可以填充整个博客文章

最简单的说,您可以迭代使用std::string::find直到您点击std::string::npos,然后使用提取内容std::string::substr

用于在空格上分割的更流畅(和惯用但基本的)版本应使用std::istringstream

auto iss = std::istringstream{"The quick brown fox"};
auto str = std::string{};

while (iss >> str) {
    process(str);
}

使用std::istream_iterators,还可以使用其迭代器范围构造函数将字符串流的内容复制到向量中。

多个库(例如Boost.Tokenizer)提供特定的标记器。

更高级的拆分需要正则表达式。C ++std::regex_token_iterator为此特别提供了

auto const str = "The quick brown fox"s;
auto const re = std::regex{R"(\s+)"};
auto const vec = std::vector<std::string>(
    std::sregex_token_iterator{begin(str), end(str), re, -1},
    std::sregex_token_iterator{}
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JAVA-如何替换字符串中的标记

Bash:如何标记字符串变量?

如何在NLTK中标记字符串语句?

如何在NLTK中标记字符串语句?

如何使用Lucene Analyzer标记字符串?

如何获取此字符串中标签的href属性?

如何在字符串列表的每个标记中插入字符串?

如何在javascript中用带引号的字符串标记字符串?

如何在没有空格的字符串中标识子字符串

如何标记字符串[数组]?

如何在标记后提取字符串?

在(旧)Lua中标记字符串

如何在R中标准化字符串

如何在c中标记字符串而不会出现错误?

如何在Java中使用字符串标记化工具从字符串中一一获得字符

C ++字符串中的字符串游标/标记

通过在C中标记字符串来获取尝试读取文本文件的无限循环

OpenEdge:如何从字符串中删除HTML标记?

如何在特定标记后面分割字符串

如何使用php在不是HTML实体结尾字符的字符串中标记分号(;)?

如何从html标记中删除子字符串

如何在XSLT 1.0中循环字符串标记?

如何在Excel的字符串中标记是否存在特定子字符串?

Matlab中标记字符串的直方图

在powershell中标记字符串数组

如何更改 html 锚标记查询字符串

如何在使用 Javascript 的字符串中出现另一个字符串标记之前插入字符串标记

如何在 Javascript 中标记长度超过 4 个字符的字符串中的每个单词

HuggingFace Tokenizer:如何获取 unicodes 字符串的标记?