gpt4 book ai didi

c++ - 字符串分词器失败

转载 作者:行者123 更新时间:2023-11-30 03:04:39 25 4
gpt4 key购买 nike

以下是我如何使用字符串分词器。

typedef std::string                      string_t;
typedef std::vector<string_t> stations_t;

void Tokenize(const string_t& str, stations_t& tokens,const string_t& delimiters = " ") {
string_t::size_type lastPos = str.find_first_not_of(delimiters, 0);
string_t::size_type pos = str.find_first_of(delimiters, lastPos);
while (string_t::npos != pos || string_t::npos != lastPos){
tokens.push_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
}

当我将字符串 1,8003,1,HWH,Kolkata Howrah Junction,,16:10,,1,0 传递给它时,它返回给我 8 字段,因为它应该返回 9 ,它完全忽略了 ,, 部分。谁能帮我看看这里的错误。

最佳答案

在您提供的示例中,您希望“16:10”和“1”之间有一个空字段,对吧?

你没有得到它的原因是因为当你得到子字符串“16:10”时,pos 是 43,你寻找一个不在分隔符字符串开始的字符在那个位置。第一个非分隔符是位置 45 处的“1”。

我建议这样:

void Tokenize2(const string_t& str, stations_t& tokens,const string_t& delimiters = " ") {
string_t::size_type elem_start = 0;
string_t::size_type elem_end = str.find_first_of(delimiters, 0);
while (elem_start != string_t::npos && elem_end != string_t::npos) {
tokens.push_back(str.substr(elem_start, elem_end - elem_start));
elem_start = str.find_first_of(delimiters, elem_end) + 1;
elem_end = str.find_first_of(delimiters, elem_start);
}

if (elem_start != string_t::npos) {
// Get the last element
tokens.push_back(str.substr(elem_start, elem_end - elem_start));
}
}

关于c++ - 字符串分词器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8471028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com