Я видел, что часть моего кода не работает должным образом. Он не входит в инструкцию if
и дает ошибку, пока это необходимо. Я попытался изучить код и нашел что-то очень странное. Когда я добавляю cout << i
в цикле for, чтобы проверить, он начинает работать хорошо. Может ли кто-нибудь объяснить, в чем проблема? Примечание. airports
- это vector
объектов Аэропорта. Airport::getName()
возвращает свое имя string
.Странное поведение кода
string name = "smth";
//this is the loop with unexpected behaviour
for (int i = 0; i < airports.size(); i++)
{
//when the following line is taken outside the comment, it works well:
//cout << i;
if (isEqualNoCaseSense(name, airports[i].getName()))
{
cout << "Could not create airport " << name << ". It already exists." << endl;
return;
}
}
Функция I используется для сравнения строк без учета регистра:
bool isEqualNoCaseSense(string str1, string str2)
{
if (str1.size() != str2.size())
return false;
char *lowerStr1 = new char[str1.size()];
char *lowerStr2 = new char[str2.size()];
for (int i = 0; i < str1.size(); i++)
{
lowerStr1[i] = tolower(str1[i]);
lowerStr2[i] = tolower(str2[i]);
}
if (strcmp(lowerStr1, lowerStr2) == 0)
{
delete[] lowerStr1;
delete[] lowerStr2;
return true;
}
else
{
delete[] lowerStr1;
delete[] lowerStr2;
return false;
}
}
EDIT: Коррекция функции сравнения фиксирует ее, но я до сих пор удивляюсь, почему cout << i
установил ее
Ваши массивы 'char' не имеют нулевого конца (необходимо для' strcmp'). Но в действительности ты им не нужен. Просто найдите stackoverflow для сравнения строк без учета регистра. – juanchopanza
Oh-em-gee. Эта чудовищная функция сравнения! просто не надо. –
@ TheParamagneticCroissant вы можете сосредоточиться на вопросе :)) – farukdgn