首页 > 解决方案 > std::out_of_range 错误并试图在两个分隔符之间获取字符串

问题描述

正如我在标题中提到的,我想获取两个分隔符之间的字符串值。在数组内部,第一个字符串可能不包含我要查找的起始分隔符,但第二个字符串也可能包含。就像在此样品中。结束分隔符可以在数组的最后一个字符串中。我想得到第一个字符串和最后一个字符串。当然,通过注意分隔符。

如果我们看一下我在下面创建的数组,我想要得到的输出如下:“KKKAAAAAADDD”

但是我在运行代码时遇到的错误如下;

在抛出 'std::out_of_range' 的实例后调用终止 what(): basic_string::substr: __pos (即 4294967295) > this->size() (即 13)

std::string hex[4] = { "ZZZZZZZZZZZ07", "06KKK","AAAAAA", "DDD07" };

string startDEL = "06";
string stopDEL =  "07";

for(int i = 0 ; i < 4 ; i++)
{
    unsigned firstLim = hex[i].find(startDEL);
    unsigned lastLim = hex[i].find(stopDEL);

    string strNew = hex[i].substr (firstLim,lastLim);

    strNew = strNew.substr(firstLim + startDEL.size());

    std::cout << strNew << std::endl;
}

标签: c++string

解决方案


unsigned firstLim = hex[i].find(startDEL);
unsigned lastLim = hex[i].find(stopDEL);

string strNew = hex[i].substr (firstLim,lastLim);

firstLim将等于std::string::npos如果startDEL未找到。 std::string::npos将大于size()of hex[i],因此substr会抛出异常。

当找不到子字符串时,您将需要添加有关如何处理的逻辑。


推荐阅读