Почему функция не возвращает массив чисел. В чем ошибка?
Задана переменная n = strlen(text);(для указания длинны массива который нужно заполнить, и для понимания до каких пор продолжать цикл i < n)
Сам массив index[n];
Функция которая принимает строку раскладывает ее на отдельные элементы[i], проверяет каждый text[i] с помощью функции isalpha на то буква ли это, если ответ true с помощью функций islower и isupper проверяет на регистр. Если символ не явлеяется буквой тогда index[i] остается без изменений(index[i] = text[i];).Соотвественно в зависимости от регистра делает вычесления и полученный результат записывает в массив целых чисел index (index[i] = text[i] - 'a';).
Возвращает записанный массив: return index[n];
Все компилируется но возвращает 0;
Прообовал менять типы данных в возварщаемого массива, возвращать не массив а строку(хотя идея конечно сомнительная). В общем не имею ни малейшего понятия в чем кроется ошибка.
Судя из моей логики эта функция долджна возвращать массив целых чисел. Спасибо за внимание.
int alphabetical(string text)
{
int n = strlen(text);
int index[n];
for(int i = 0; i <= n; i++)
{
if(isalpha(text[i]))
{
if(islower(text[i]))
{
index[i] = text[i] - 'a';
}
else if(isupper(text[i]))
{
index[i] = text[i] - 'A';
}
}
else
{
index[i] = text[i];
}
}
return index[n];
}
Ответы (1 шт):
Возвращает записанный массив: return index[n]; — увы, это возврат конкретного элемента. К тому же выходящего за границы массива :)
И, кстати, for(int i = 0; i <= n; i++) — тут вы тоже выходите за рамки массива. Возвращайте или указатель на динамический массив в памяти (только его надо не забыть потом удалить), либо некоторый объект класса, в котором будет содержаться массив.
Кстати, можно вернуть просто string — если текст английский, смещения будут вполне помещаться в char, вот вам и нужный массив...
Например, строку можно вернуть вот так:
string alphabetical(string text)
{
for(char&c: text)
if(isalpha(c))
if(islower(c)) c -= 'a';
else if(isupper(c)) c-= 'A';
return text;
}
Update
string alphabetical(string text)
{
for(int i = 0; i < text.size(); ++i)
{
if(isalpha(text[i]))
if(islower(text[i])) text[i] -= 'a';
else if(isupper(text[i])) text[i]-= 'A';
}
return text;
}