在此字符串操作代码中获取out_of_range错误
Getting out_of_range error in this string manipulation code
嗨,我正在打标准::out_of_range:basic_string::substr在下面的代码中。一直在努力修复它,但无法完成。
std::string orig_str = "1-1,2-3,4-4,56-75,77-77";
size_t number_digits;
for (size_t i = 0; i < orig_str.size(); ++i)
{
number_digits = orig_str.find_first_of(",", i) - i - 1;
if(orig_str.find("-", i) != std::string::npos)
if (orig_str.substr(i - number_digits, i - 1) == orig_str.substr(i + 1, i + number_digits))
orig_str.erase(i-number_digits, number_digits + 1);
}
基本上这段代码正在操纵字符串以删除一些范围预期行为为:输入字符串:"0-0,2-7,88-88" 输出字符串:"0,2-7,88"
AJ,这是我们在聊天中讨论的伪代码:
input_string = "1-1,2-3,4-4,56-75,77-77"
output_string = ""
while (input_string is not empty)
sub = input_string.substr(up to first comma)
input_string = input_string.substr(after first comma)
if (sub.substr(up to dash) == sub.substr(after dash))
output_string += sub.substr(up to dash)
else
output_string += sub
if (input_string is not empty)
output_string += ","
您迭代原始字符串的长度,并对其进行修改并特此更改长度。编译器可能会优化对orig_str.size()
的调用,这意味着它将获取一次长度,并允许您迭代超过新长度的字符串。
您可能应该更改以保持orig_str
从一开始就保持原样(否则它的名字非常糟糕),并将结果放在一个新字符串中。
int flag = 0;
int num_ch;
char * fnum = NULL, * snum = NULL;
int numOfLoop = orig_str.size();
for(int i = 0; i < numOfLoop; i++)
{
if(orig_str[i] == '-')
{
flag = 1;
}
else if(orig_str[i] == ',')
{
int ret = strcmp(fnum, snum);
if(ret == 0)
{
int sizeOfNUM = strlen(fnum);
int numOfChToReplace = sizeOfNUM + sizeOfNUM + 1;
orig_str.replace(i - numOfChToReplace,numOfChToReplace, fnum);
numOfLoop = numOfLoop - (sizeOfNUM + 1);
i = i - (sizeOfNUM + 1);
}
flag = 0;
delete [] fnum;
delete [] snum;
fnum = NULL;
snum = NULL;
}
else
{
if(flag == 1)
{
if(snum == NULL)
{
snum = new char[2];
snum[0] = orig_str[i];
snum[1] = ' ';
}
else
{
int size = strlen(snum);
char * tmp = snum;
snum = new char[size + 2];
for( int j = 0; j < size; j++)
snum[j] = tmp[j];
snum[size] = orig_str[i];
snum[size + 1] = ' ';
}
}
else
{
if(fnum == NULL)
{
fnum = new char[2];
fnum[0] = orig_str[i];
fnum[1] = ' ';
}
else
{
int size = strlen(fnum);
char * tmp = fnum;
fnum = new char[size + 2];
for( int j = 0; j < size; j++)
fnum[j] = tmp[j];
fnum[size] = orig_str[i];
fnum[size + 1] = ' ';
}
}
}
}
int ret = strcmp(fnum, snum);
if(ret == 0)
{
int sizeOfNUM = strlen(fnum);
int numOfChToReplace = sizeOfNUM + sizeOfNUM + 1;
orig_str.replace(i - numOfChToReplace,numOfChToReplace, fnum);
numOfLoop = numOfLoop - (sizeOfNUM + 1);
i = i - (sizeOfNUM + 1);
}
flag = 0;
delete [] fnum;
delete [] snum;
fnum = NULL;
snum = NULL;
std::cout << orig_str.c_str() << std::endl;
相关文章:
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 解决方案在第 25 行执行错误'out of bounds'
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 从 MSVC14 切换到 MSVC16 会导致"compiler is out of heap space (C1060)"错误
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 如何解决'vector subscript out of range'错误?
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- 空集"Out of bound iterator"
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- 注册 Clang 检查器时出错:"out-of-line-definition of register"
- QList::operator[]中的断言失败<T>:QJoysticks 中的"index out of range"
- 尝试获取矩阵的正确对角线会导致"vector out of range"错误
- 运算符方法和返回对象"out-of-scope"?
- 如何使用 mpi 分散修复"vector subscript out of range"?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Vector subscript out of range",在返回声明?
- QList<T>::operator[]: "index out of range" 中的断言失败
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- 如何处理C++'index out of bounds error'?
- MySQL 异常"connection lost during query"、"MySQL server has gone away"和"command out of sync"