
Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//ђҐЄгабЁўл© бЇгбЄ ђ §Ў®а Є®бв вл б++
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
int analysis(char *str);
int Point_Recurs(char *str1,int N);
int Digit_Recurs(char *str1,int N);
int String_Recurs(char *str1,int N);
int Char_Recurs(char *str1);
int work()
{
FILE *in;
char buf[50];
if ((in = fopen("input.txt", "r"))
== NULL)
{
fprintf(stderr, "Cannot open input file.\n"); // standard error output device
return 1;
}
while (!feof(in)) //if end-of-file has been reached on a stream
{
fgets(buf,50,in); //gets a string from a stream
if(feof(in)) break;
buf[strlen(buf)-1]='\0'; //end of the string
if (strlen(buf)!=0) cout<<buf<<" - ";
analysis(buf);
}
fclose(in);
return 0;
}
int analysis(char *str)
{
if (str[0]=='.') Point_Recurs(str,1);
if (isdigit(str[0])) Digit_Recurs(str,1);
if (str[0]=='\'') Char_Recurs(str);
if (str[0]=='\"') String_Recurs(str,1);
if ((str[0]!='.')&&(str[0]!='\"')&&(str[0]!='\'')&&(!isdigit(str[0])))
{
cout<<" Error in the character number: "<<1<<endl;
return 2;
}
return 0;
}
int Point_Recurs(char *str1,int N)
{
if (N==strlen(str1))
{
cout<<" Ok! "<<endl;
return 1;
}
if (!isdigit(str1[N]))
{
cout<<" Error in the character number: "<<N+1<<endl;
return 2;
}
N++;
Point_Recurs(str1,N);
return 0;
}
int Digit_Recurs(char *str1,int N)
{
if (N==strlen(str1))
{
cout<<" Ok! "<<endl;
return 1;
}
if ((!isdigit(str1[N])) && (str1[N]!='.'))
{
cout<<" Error in the character number: "<<N+1<<endl;
return 2;
}
if (str1[N]=='.') { N++; Point_Recurs(str1,N); return 3;}
N++;
Digit_Recurs(str1,N);
return 0;
}
int String_Recurs(char *str1,int N)
{
if (str1[N]=='\0')
{
cout<<" Error in the character number: "<<N+1<<endl;
return 1;
}
if (str1[N]=='\"')
if (str1[N+1]=='\0')
{
cout<<" Ok! "<<endl;
return 1;
}
else
{
cout<<" Error in the character number: "<<N+2<<endl;
return 1;
}
N++;
String_Recurs(str1,N);
return 0;
}
int Char_Recurs(char *str1)
{
if ((str1[1]=='\0')||(str1[1]=='\''))
{
cout<<" Error in the character number: "<<2<<endl;
return 1;
}
if (str1[2]=='\0')
{
cout<<" Error in the character number: "<<3<<endl;
return 1;
}
if (str1[2]=='\'')
if (str1[3]=='\0')
{
cout<<" Ok! "<<endl;
return 1;
}
else
{
cout<<" Error in the character number: "<<4<<endl;
return 1;
}
if (str1[3]=='\'')
if (str1[4]=='\0')
{
cout<<" Ok! "<<endl;
return 1;
}
else
{
cout<<" Error in the character number: "<<5<<endl;
return 1;
}
else
{
cout<<" Error in the character number: "<<4<<endl;
return 1;
}
}
int main()
{
clrscr();
work();
getchar();
return 0;
}