Он должен преобразовать строку следующим образом: Пример: HEloOO, должен быть преобразован в: heLOoo. По какой-то причине это не работает, оно просто не конвертирует буквы из верхнего регистра в нижний регистр, и наоборот, любая помощь будет оценена по достоинству?Как сделать рекурсивную функцию, необходимо проверить, соответствует ли текущая буква, а следующая - строчной или верхней строкой?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void rek(char array[], int d)
{
int counter=0;
if(d==0)
{
printf("%s \n",array);
printf("%d \n",counter);
}
else
{
if((array[d]>='A' && array[d]<='Z')&&(array[d-1]>='A' && array[d-1]<='Z'))
{
array[d]=array[d]+32;
array[d-1]=array[d-1]+32;
counter++;
rek(array,d-2);
}
if((array[d]>='a' && array[d]<='z')&&(array[d-1]>='a' && array[d-1]<='z'))
{
array[d]=array[d]-32;
array[d-1]=array[d-1]-32;
counter++;
rek(array,d-2);
}
}
}
int main()
{
char array[100];
int d;
gets(array);
d=strlen(array);
rek(array,d);
return 0;
}
Это, вероятно, не проблема, но в стандартном C или стандартном C++ нет ничего, что требует 'array [d]> = 'A' && array [d] <= 'Z'' делать что-либо разумное , Используйте 'std :: isupper' и' std :: islower'. Также читайте о 'std :: topper' и' std :: tolower'. –
Используйте 'printf' для отображения значений' d', 'array [d]' и 'array [d-1]' в начале функции 'rek', и проблема должна быть очевидной. – user3386109
Также обратите внимание, что у вас возникнет проблема, если 'd' всегда является нечетным числом, потому что в этом случае рекурсивный вызов никогда не достигнет' 0'. – user3386109