CPP 字符串的字符串标记器?

发布于 2024-09-16 05:52:00 字数 56 浏览 7 评论 0原文

我想对 CPP 字符串使用字符串分词器,但我能找到的只是 Char*。 CPP 字符串有类似的吗?

I want to use string Tokenizer for CPP string but all I could find was for Char*.
Is there anything similar for CPP string?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

青衫儰鉨ミ守葔 2024-09-23 05:52:00

“令牌”是什么意思?如果它是由任何空格分隔的内容,则字符串流就是您想要的:

std::istringstream iss("blah wrxgl bxrcy") 
for(;;) {
  std::string token;
  if(!(iss>>token)) break;
  process(token);
}
if(!iss.eof()) report_error();

或者,如果您正在寻找某个单个分隔字符,您可以替换 iss>>token与 std::getline(iss,token,sep_char) 。

如果有多个字符可以充当分隔符(并且不是空格),则为 std::string::find_first()std::string::substr 的组合() 应该可以。

What do you mean by "token"? If it's something separated by any whitespace, the string streams is what you want:

std::istringstream iss("blah wrxgl bxrcy") 
for(;;) {
  std::string token;
  if(!(iss>>token)) break;
  process(token);
}
if(!iss.eof()) report_error();

Alternatively, if your looking for a a certain single separating character, you can replace iss>>token with std::getline(iss,token,sep_char).

If it's more than one character that can act as a separator (and if it's not whitespaces), a combinations of std::string::find_first() and std::string::substr() should do.

你对谁都笑 2024-09-23 05:52:00

您可以按照 chubsdad 的说明进行操作或使用 boost tokenizer : http: //www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm

如果您害怕 Boost,那么自己做并不那么复杂。

You can do as said by chubsdad or use boost tokenizer : http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm

Doing it by yourself is not so complicated if you're affraid by Boost.

三生路 2024-09-23 05:52:00

您应该看看 Boost Tokenizer

You should take a look at Boost Tokenizer

苏佲洛 2024-09-23 05:52:00

查看 STL 算法,例如 find_first_offind_first_not_of 等来创建自定义算法。

Check out STL algos like find_first_of, find_first_not_of and so on to create a custom one.

深空失忆 2024-09-23 05:52:00

试试我在某处找到的这个片段(也许就在这里?):

#include <string>
#include <vector>
#include <sstream>

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while(std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    return split(s, delim, elems);
}

Try this snippet I found somewhere (maybe even around here?):

#include <string>
#include <vector>
#include <sstream>

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while(std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    return split(s, delim, elems);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文