Почему функция не возвращает массив чисел. В чем ошибка?

Задана переменная 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 шт):

Автор решения: Harry

Возвращает записанный массив: 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;
}
→ Ссылка