Строковый индекс вне диапазона C ++: отладка

Итак, я отлаживаю полученную ошибку времени выполнения. msgstr «строковый индекс вне диапазона».

Я знаю, где проблема и что ее вызывает, но я ищу возможное решение, которое будет работать аналогичным или идентичным образом, не давая мне ошибки.

Вот фрагмент кода, где происходит ошибка. Поправьте меня, если я ошибаюсь, проблема возникает из-за того, что я объявляю строку 0 длины, а затем пытаюсь манипулировать n-м элементом.

std::string VsuShapeLine::GetRunwayNumber()
{
std::string name, nbstr, newnbstr, convnbstr;
int idx,idx2, num, count, pos;
char buf[3];
int idx3=-1;
name = this->GetName();
idx = name.find("ALight");
if (idx == -1)
{
idx = name.find("Lights");
idx3 = name.find_last_of("Lights");
}
idx2 = name.find('_');
idx2 +=3;

nbstr = name.substr(idx2, idx-idx2);

if (idx3 != -1)
idx3++;
else
idx3 = idx+6;

if (name.at(idx3) == 'N')
{
pos = nbstr.length();
if (isalpha(nbstr[idx-1]))
nbstr[pos-1] = _toupper(nbstr[pos-1]);
return (nbstr);
}

else if (name.at(idx3) == 'F')
{
convnbstr = nbstr.substr(0,2);
num = atoi(convnbstr.data());
num +=18;
_itoa(num, buf, 10);
newnbstr = buf;
count = nbstr.size();

if (count > 2)
{
if (nbstr.at(2) == 'l' || nbstr.at(2) == 'L')
newnbstr += 'r';

else if (nbstr.at(2) == 'r'|| nbstr.at(2) == 'R')
newnbstr += 'l';

else if (nbstr.at(2) == 'c' || nbstr.at(2) == 'C')
newnbstr += 'c';
}
pos = newnbstr.length();
if (isalpha(newnbstr[pos-1]))
newnbstr[pos-1] = _toupper(newnbstr[pos-1]);
return (newnbstr);
}

return ("");
}

-1

Решение

Кстати, для тех, кто заинтересован, проблема была в этой строке:

if (isalpha(nbstr[idx-1])

На этом этапе nbstr — это строка длиной 3 и значением idx, как работает моя программа, всегда равная 9 или 10.

Также, как упомянул ниндзя в отставке, проверки должны выполняться после использования функции string :: find.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector