c++ - 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;
}
解决方案
和
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
会抛出异常。
当找不到子字符串时,您将需要添加有关如何处理的逻辑。
推荐阅读
- angular - ng build --prod 在 ag-grid v 22.1.1 升级后失败
- ios - Why is the CollectionView function called twice in Swift?
- java - 从 S3 下载和解压缩文件的内存占用
- r - 将日期转换为数字,但限制为一年中的天数
- python - 如何使用 HTTPS 在 cdn 中的特定服务器 IP 上获取网站?
- regex - Google Sheet 大小写比较
- android - 模拟 FirebaseRemoteConfig getBoolean()
- django - 使用 django + gunicorn + nginx 发送电子邮件获取超时
- python - 如何使用flask-sqlalchemy在两个不同的表中创建两个唯一的主键?
- wordpress - 如何通过 wordpress 中的自定义插件创建自定义艺术家页面