Код продолжает возвращать 255 или -1073741819, когда char

Это код для преобразования строки в строчные буквы. Я использовал идею разницы значений ASCII между прописными и строчными буквами в алфавите, равными 32. Я использую кодовые блоки. Код выполняет преобразование, но дает эту ошибку. Почему я получаю ошибку в этом случае, хотя в литье строки в char нет ошибки? Как это исправить?

#include<iostream>

using namespace std;

string convertlow (string input )
{
    char letters[255];
    int ascii[255];

     for (int i=0;i<255;i++)
     {
         letters[i]=input[i];
         ascii[i]=(int)letters[i];

         if (ascii[i] < 91)
         {
             ascii[i] = ascii[i] + 32;
             letters[i] = (char) ascii[i];
             input[i] = letters[i];
         }
    }

    return input;
}

int main()
{
    string in;
    cin >> in;

    cout << "The lowercase version is: \n" << convertlow(in);
    return 0;
};
+1
источник поделиться
1 ответ

Вы должны изменить:

if (ascii[i]<91)
{
    ascii[i]=ascii[i]+32;
    letters[i]= (char)ascii[i];
    input[i]=letters[i];
}

чтобы:

if(ascii[i] >= 'A' && asc[i] <= 'Z')
{
    ascii[i]   = ascii[i]+('a' - 'A');
    letters[i] = (char)ascii[i];
    input[i]   = letters[i];
} 

Но ваша проблема - массив вне диапазона (размер строки должен быть меньше 255). Чтобы решить эту проблему, вы можете изменить свой метод на:

string convertlow (string input ){
    for(int i = 0 ; i < input.size() ; ++i){
        if(islower(input[i]) ){
            input[i] = tolower(input[i]);
        }
    }
    return input;
}

Вам нужно включить заголовки: string и algorithm

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос