Mi controllate questo esercizio se è corretto???
Si realizzi un programma che effettua le seguenti operazioni:
1) Legge (un carattere alla volta) una sequenza di parole, separate dal simbolo ‘+’, memorizzandole nel vettore di caratteri v e separandole con ‘\0’. Si assuma che anche la prima parola sia preceduta dal simbolo ‘+’ e che ogni parola sia composta solo da lettere o cifre, per cui non si devono memorizzare in v altri caratteri o spazi intermedi digitati dall’utente.
Crea inoltre un vettore di puntatori chiamato vp, il cui elemento i-esimo punta alla parola i-esima memorizzata nel vettore v. Per esempio, nel caso in cui la sequenza in input sia “x +m 1+ m2+m_23\n" v=[m1\0m2\0m23\0…].
Si assuma che la sequenza in input termini con l’inserimento di ‘\n’, che il numero massimo di parole sia 80, mentre il numero massimo di caratteri inseriti dall’utente sia 1000. Si creino a tale scopo i simboli di costante MAX_P e MAX_C.
a) Si mostri l’automa a stati finiti che modella tale scenario.
b) Si crei la funzione leggi che riceve in input i vettori v e vp come parametri e restituisce il numero di parole lette.
codice:
#include "stdafx.h"
#include <iostream>
#define MaxC 1000;
#define MaxP 80;
#define Parola 1;
#define Altro 0;
char * cerca(int c, char v[], char * vp[]);
int main(int argc, char* argv[])
{
printf("Esame\n");
char c;
char V[1000];
char *Vp[80];
int State;
int i=0;
int parole=0;
while (c=getchar()!='\n')
{
switch (State){
case 1:
if (c=='+')
{
Vp[parole] = &V[i+1];
V[i]='\0';
i++;
parole++;
}
if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z'))||c!='+')
{
State=0;
break;
}
V[i]=c;
i++;
break;
case 0:
if (c=='+')
{
Vp[parole] = &V[i+1];
V[i]='\0';
i++;
parole++;
}
if ((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
V[i]=c;
i++;
State=1;
}
break;
}
}
system("Pause");
return 0;
}