The final "correct" code:
Code:
#include <cstdio>#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
char flagcheck ( char );
char flagcheck( char flag )
{
while (( flag != 'Y' ) && ( flag != 'y' ) && ( flag != 'N' ) && ( flag != 'n' ))
{
cout<<"Wrong input! Try again!" ;
cin>>flag;
}
return flag;
}
int main()
{
vector<char> state;
vector<char> symbol;
vector<int> finstateflag;
char a, flag, c;
int i, j, k, statenos, symnos;
cout<<"Enter the initial state: ";
cin>>a;
state.push_back (a);
finstateflag.push_back (0);
for ( i = 2; a != '0'; i++ )
{
cout<<"Enter state "<<i<<". Press 0 to end: ";
cin>>a;
if ( a == '0')
{
break;
}
state.push_back (a);
cout<<"Press Y if the state is a final state, else press N: ";
cin>>flag;
flag = flagcheck( flag );
switch(flag)
{
case 'Y':
finstateflag.push_back (1);
break;
case 'y':
finstateflag.push_back (1);
break;
case 'N':
finstateflag.push_back (0);
break;
case 'n':
finstateflag.push_back (0);
break;
default:
cout<<"Wrong input! Aborted!";
exit(0);
}
}
cout<<"Enter symbol 1: ";
cin>>a;
symbol.push_back (a);
for ( i = 2; a != '0'; i++ )
{
cout<<"Enter symbol "<<i<<". Press 0 to end: ";
cin>>a;
if ( a == '0')
{
break;
}
symbol.push_back (a);
}
statenos = state.size();
symnos = symbol.size();
vector < vector < vector < char > > > NextState ( state.size(), vector < vector < char > > ( symbol.size(), vector < char > ( state.size(), 'A' )));
vector < vector < int > > counter ( state.size(), vector < int > ( symbol.size(), 0 ));
for ( i = 0; i < statenos; i++ )
{
if (finstateflag[i] == 1)
continue;
else
{
for ( j = 0; j < symnos; j++ )
{
k = 0;
do
{
cout<<"Enter Next State for "<<state[i]<<" when "<<symbol[j]<<" is entered. ";
cout<<"Press 0 if there is no state left : ";
cin>>c;
if ( c != '0')
{
NextState[i][j][k] = c;
k++;
counter[i][j] = k;
}
else
break;
} while ( c != '0');
}
}
}
for ( i = 0; i < statenos; i++ )
{
if (finstateflag[i] == 1)
{
cout<<endl<<state[i]<<" -> lamda";
continue;
}
else
{
for ( j = 0; j < symnos; j++ )
{
k = counter[i][j] - 1;
while ( k >= 0 )
{
cout<<endl<<state[i]<<" -> "<<symbol[j]<<NextState[i][j][k];
k--;
}
}
}
}
getchar();
}
Doesn't seem too neat. I'll try to do this using class next week. Any tips for doing so will be appreciated.