Написать програму для решения следующей задачи используя рекурсию
Нужно написать рекурсивную функцию, которая получает массив символов и проверяет содержит ли он правильную запись идентификатора. Идентификатор - это имя переменной. И покажите что здесь не так
#include <iostream>
#include <cctype>
using namespace std;
int recFoo(char arr[],const int size,int i)
{
if(arr[i]='\0')
{
cout <<"Identifier is correct."<<endl;
return true;
}
if(!isalpha(arr[0]) && arr[0]!='_')
{
cerr<<"Wrong identifier!!!";
return false;
}
if(isalpha(arr[i])||isdigit(arr[i])||arr[i]=='_')
{
return recFoo(arr,size,i++);
}
else
{
cerr<<"Wrong identifier!!!";
return false;
}
}
int main()
{
const int size=20;
char arr[size];
int i=1;
cout <<"Input some identifier: ";
cin >>arr;
cout <<endl;
recFoo(arr,size,i);
}
Ответы (2 шт):
if(arr[i]='\0')
{
cout <<"Identifier is correct."<<endl;
return true;
}
Этот фрагмент никогда не выполнится - вы просто зануляете в нем a[i]; и получаете if (false)... Понятно, что дальше ничего не работает. Но если бы работало, то...
Далее, проверка
if(!isalpha(arr[0]) && arr[0]!='_')
корректна, но зачем ее повторять при обработке каждого символа?
И совершенно непонятно, зачем передавать size в качестве аргумента.
Это то, что бросилось в глаза мне...
Не очень понятно что вам нужно, но в строке:
if(arr[i]='\0')
...
вы присваиваете элементу массива новое значение. Для проверки на равенство необходимо использовать оператор == :
if(arr[i] == '\0')
...