gpt4 book ai didi

c++ - 具有多个分隔符的字符串标记器,包括没有 Boost 的分隔符

转载 作者:IT老高 更新时间:2023-10-28 23:21:30 26 4
gpt4 key购买 nike

我需要在 C++ 中创建字符串解析器。我尝试使用

vector<string> Tokenize(const string& strInput, const string& strDelims)
{
vector<string> vS;

string strOne = strInput;
string delimiters = strDelims;

int startpos = 0;
int pos = strOne.find_first_of(delimiters, startpos);

while (string::npos != pos || string::npos != startpos)
{
if(strOne.substr(startpos, pos - startpos) != "")
vS.push_back(strOne.substr(startpos, pos - startpos));

// if delimiter is a new line (\n) then add new line
if(strOne.substr(pos, 1) == "\n")
vS.push_back("\\n");
// else if the delimiter is not a space
else if (strOne.substr(pos, 1) != " ")
vS.push_back(strOne.substr(pos, 1));

if( string::npos == strOne.find_first_not_of(delimiters, pos) )
startpos = strOne.find_first_not_of(delimiters, pos);
else
startpos = pos + 1;

pos = strOne.find_first_of(delimiters, startpos);

}

return vS;
}

这适用于 2X+7cos(3Y)

(tokenizer("2X+7cos(3Y)","+-/^()\t");)

但给出 2X 的运行时错误

我需要非 Boost 解决方案。

我尝试使用 C++ String Toolkit (StrTk) Tokenizer

std::vector<std::string> results;
strtk::split(delimiter, source,
strtk::range_to_type_back_inserter(results),
strtk::tokenize_options::include_all_delimiters);

return results;

但它不会将 token 作为单独的字符串。

例如:如果我将输入设为 2X+3Y

输出 vector 包含

2X+

3 年

最佳答案

可能发生的情况是当通过 npos 时发生崩溃:

lastPos = str.find_first_not_of(delimiters, pos);

只需在循环中添加中断,而不是依赖 while 子句来中断它。

if (pos == string::npos)
break;
lastPos = str.find_first_not_of(delimiters, pos);

if (lastPos == string::npos)
break;
pos = str.find_first_of(delimiters, lastPos);

关于c++ - 具有多个分隔符的字符串标记器,包括没有 Boost 的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152806/

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