Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 2002 / SPUSK

.CPP
Скачиваний:
13
Добавлен:
17.04.2013
Размер:
3.19 Кб
Скачать
//ђҐЄгабЁў­л© бЇгбЄ ђ §Ў®а Є®­бв ­вл б++
#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;
}

Соседние файлы в папке 2002