при выполнении
else if(s[i] >= 97 && s[i] <= 122)
{
s[i] = s[i] - 97;
}
, где s означает «abc», вы заменяете «a» на 0 (затем «b» на 1 и «c»на 2) поэтому первый символ становится 0, а длина строки становится 0 для любой функции, где нулевой символ указывает на конец строки.
Почему вы делаете s[i] = s[i] - 97;
или эквивалентный?Какова ваша цель?
return s;// здесь длина s равна 1
нет, это 0, когда ввод "abc" или "ABC"
Не использовать (ascii) код в качестве литералацелое число, используйте «а» и т. д.
string shift(string s)
{
for(int i = 0, int n = strlen(s); i < n; i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
s[i] = s[i] - 'A';
}
else if(s[i] >= 'a' && s[i] <= 'z')
{
s[i] = s[i] - 'a';
}
printf("%i\n", s[i]);
}
return s;
}
Чтобы узнать, является ли символ альфа, я также рекомендую вам использовать isalpha
Примечание, а не делать for(int i = 0, int n = strlen(s); i < n; i++)
вы можете просто сделать for(int i = 0; s[i] != 0; i++)
, и лучше набрать i с size_t
вместо int , потому что это тип для индекса (это тот, который возвращается strlen etc)