gpt4 book ai didi

c++ - std::find 未按预期运行

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:46 25 4
gpt4 key购买 nike

std::find 未按预期进行评估。

我有一个 vector lexeme_ 定义为

static const std::string delimiters_[] = {" ", ",", "(", ")", ";", "=", ".", "*", "-"};

static std::vector<std::string> lexeme_(std::begin(delimiters_), std::end(delimiters_));

我使用定义为 std::find 的评估

while ( std::find(lexeme_.begin(),lexeme_.end(),std::string(&commandLine_.at(position_))) == lexeme_.end())             
{
// Concat each successive alphanumeric character to 'token'
token += commandLine_.at(position_);
// Update the index into 'commandLine'
position_ += 1;
}

评估应该将 lexeme_ 中的 char 与类似于此 Java 表达式的 commandLine 中的 char 进行比较

!lexeme.contains(Character.toString(commandLine.charAt(position)))  

评估应该比较char,如果它确定比较满足delimiters中的char,则while循环将退出。

测试用例

#include<algorithm>
#include<iostream>

static const std::string delimiters_[] = {" ", ",", "(", ")", ";", "=", ".", "*", "-"};

static std::vector<std::string> lexeme_(std::begin(delimiters_), std::end(delimiters_));

std::string commandLine = "check me";

while (std::find(lexeme_.begin(),lexeme_.end(),std::string(&commandLine_.at(position_))) == lexeme_.end())
{
std::cout "I should stop printing when encountering a space ' ' << std::endl;
}

最佳答案

临时比较字符串的构造函数不正确。它不是构建一个单字符字符串,而是构建一个从该字符开始到原始字符串结尾的字符串,如果幸运的话 - 可能有一些 std::string在某个地方实现不会自动归零终止内部缓冲区。

所以不是这个:

std::string(&commandLine_.at(position_))

使用:

std::string(1, commandLine_.at(position_))

关于c++ - std::find 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15889336/

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