Найти самое длинное общее слово двух заданных предложений.

Цель работы: Научитьсяработать со строками с помощью указателей.
Задание:
Найти самое длинное общееслово двух заданных предложений.
Требования к программе:
1. Ввод и вывод как стерминала (stdio), так и из/в файл ().
2. Работа со строкамитолько через указатели.
Выполнение работы
Описание входных,выходных и промежуточных данных.
Входные данные:
str1,str2: символьный          //срока 1 и строка 2
Выходные данные:
p                 :символьный              // хранит в семе максимальное слово
Промежуточные данные:
st1, st2        :символьный              // массив скалярных произведений
i,n,j,k                   : целый      // границы слова в первой и во второй строке

 
         ввод
                                        str1,str2
        I:=0; N :=0; p := “ ”;
        выполнять
 
 
       
 
                       
если (length(p) 0) то   
         вывод
                         
иначе
          вывод  
Алгоритм./> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
Листинг программы
#include
#include
#include
#include
#include
/*титульный лист*/
voidtit_list()
{
 clrscr();
 gotoxy(20,1);
 printf(«Министерствообразования и науки Украины»);
 gotoxy(12,2);
 printf(«Донецкийгосударственный институт искусственного интеллекта»);
 gotoxy(31,8);
 printf(«Лабораторнаяработа №3 „);
 gotoxy(35,9);
 printf(“подисциплине:»);
 gotoxy(17,10);
 printf(“‘Основыпрограммирования и алгоритмические языки'”);
 gotoxy(50,15);
 printf(«Выполнил:»);
 gotoxy(50,16);
gotoxy(50,17);
gotoxy(50,19);
 printf(«Проверил: „);
 gotoxy(50,20);
gotoxy(50,21);
getch();
 return;
 }
int cha (charchar1){
 if( ((char1-33)) || ((char1 -129)) || ((char1 > 96)&&(char1 64)&&(char1
 else { return0; }
 }
int sravn_char(char c1,char c2){
 if (abs(c1)> abs(c2)){
         switch(abs(c1 — c2)){
          case32: if ( ( (c1 > -129)&&(c1 96)&&(c1
                             return0;}
                            else{return -2;} break;
          case80: if ((c1 > -113)&&(c1
                             return0;}
                            else{return -3;} break;
          default:;return -1;break;
         }
 }
 else{
         switch(abs(c2 — c1)){
          case0: return 0;break;
          case32: if ( ( (c2 > -129)&&(c2 96)&&(c2
                             return0;}
                            else{return -2;} break;
          case80: if ((c2 > -113)&&(c2
                             return0;}
                            else{return -3;} break;
          default:return -1; break;
         }
 }
}
int main(void)
{
 tit_list();
 clrscr();
 char*input,*name;
 char*p,*bf,*buf,*str1,*str2;
 intb=0,k,lev1,lev2,l1,l2,prv1,prv2;
 int l,bb,v,n;
//************* ВВОДДАННЫХ *****************************************
FILE *f =fopen(“Отчет.zen»,«w+»);
c:
clrscr();
printf(“[1]Ввод с клавиатуры\n”);
printf(“[2] Ввод сфайла\n”);
printf(“[0]Выход\n”);
switch(getch()){
case 49:
//************* ввод склавиатуры ***********************
 clrscr();
 charfstr1[10000],fstr2[10000];
         printf(“\t\t\tВведите первую строку: \n”);
         gets(fstr1);
 printf(“\t\t\tВведите вторую строку: \n”);
         gets(fstr2);
//***************************************************************
fprintf(f,«Данныевводяться с клавиатуры \n»);
printf(“\n********************************************\n”);
 fprintf(f,”\n********************************************\n”);
 printf(“\n Первая строка:\n”);
 fprintf(f,”\n Перваястрока:\n”);
 printf(“%s \n\n”,fstr1);
 fprintf(f,”%s\n\n”,fstr1);
 printf(” Втораястрока:\n”);
 fprintf(f,” Втораястрока:\n”);
 printf(“%s \n”,fstr2);
 fprintf(f,”%s\n”,fstr2);
printf(“\n********************************************\n”);
 fprintf(f,”\n********************************************\n”);
//************************************************************
p[0] = ‘\0’;
//************************************************************
         b =strlen(fstr1);
         buf =strdup(fstr1);
         buf+= b;
//************************************************************
         for(k=0;k
          buf–;
          if((*buf == ‘ ‘)||(k == b)){
                   buf++;
                   while((cha(buf[strlen(buf)-1]) == 0)&&(strlen(buf) != 0)){
                    buf[strlen(buf)-1]= ‘\0’;
                   }
//**************************
          v =strlen(fstr2);
          bf =strdup(fstr2);
          bf+= v;
          for(n=0;n
                    bf–;
                    if((*bf == ‘ ‘)||(n == v)){
                    bf++;
                    while((cha(bf[strlen(bf)-1]) == 0)&&(strlen(bf) != 0)){
                             bf[strlen(bf)-1]= ‘\0’;
                    }
//************************************************************
          if(strlen(buf) == strlen(bf)){
//*********************проверка отдельно каждого символа
                   l=-1;
                   do { l++;
                    bb= sravn_char (buf[l],bf[l]);
                   }while((bb== 0)&&(l
//************************************************************
                   if((bb == 0)&&( strlen(buf) == strlen(p))){
                    printf(«Общее найбольшое слово:’%s’\n»,buf);
                    fprintf(f,«Общеенайбольшое слово :’%s’\n»,buf);
                   }
                   if((bb == 0)&&( strlen(buf) > strlen(p))){
                    p= strdup(buf);
                   }
          }
//************************************************************
                    bf–;
                    *bf= ‘\0’;
                    }
          }
          buf–;
          *buf= ‘\0′;
          }
         }
if (strlen(p)!= 0){
 printf(«Общее найбольшое слово:’%s’\n»,p);
 fprintf(f,«Общеенайбольшое слово :’%s’\n»,p);
}
else{
 printf(«Общих словв предложений нету\n»);
 fprintf(f,«Общихслов в предложений нету\n»);
}
         getch();
break;
//********************Ввод с файла
case 50:
FILE *ff;
clrscr();
printf(«Введите имя файла:»);
do{
 k=0;
 lev1 = 0;
 b=0;
 scanf(“%s”,name);
 printf(«name= {%s}\n»,name);getch();
 fprintf(f,«Данные читаем изфайла: %s\n»,name);
 if ((ff = fopen(name,«rt»))== NULL){printf(«Cannot open output file.\n»);}
 clrscr();
 b=1;
 do{
 if (b == 3){b= 2; lev2 = prv1+1;}
 input[0] =’\0’;
 fscanf(ff,”%s”,input);
 if(strlen(input) == 0){ b = 0;}
//**************Первая строка ****************************
 if ((b ==-1)||(b == 1)){
          if(b == 1){ str1 = strdup(input);b = -1;}
          else{strcat(str1,” “);strcat(str1,input);}
          if(input[strlen(input)-1] == ‘.’){b = 3;prv1 = ftell(ff);}
 }
//*************** Втораястрока ***************************
 if ((b == 2)||(b ==-2)){
 if (b == 2){ str2 = strdup(input);b =-2;}
          else{strcat(str2,” “);strcat(str2,input);}
          if(input[strlen(input)-1] == ‘.’){b = -3;prv2 = ftell(ff);}
 }
//*********************************************************
 }while((b !=-3)&&(b != 0));
 if (b == 0){
 clrscr();
 printf(“\t\t E R RO R \n В файле не имееться двух предложений!!!\n Введите другое имя файла:”);
 fprintf(f,”\t\t E RR O R \n В файле не имееться двух предложений!!!\n Введите другое имя файла.\n”);
 fclose(ff);
 }
}while(b == 0);
//************************Исходные данные
 fseek(ff, 0, SEEK_SET);
 clrscr();
 printf(“********************************************\n”);
 fprintf(f,”\n********************************************\n”);
 printf(“\n Перваястрока:\n”);
 fprintf(f,”\n Перваястрока:\n”);
 b=0; l1 = lev1;
 do{
 fseek(ff, l1,SEEK_SET);
 fscanf(ff,”%s”,input);
 printf(“%s”,input);
 fprintf(f,”%s”,input);
 l1=ftell(ff);
 }while(l1
 printf(“\n\n”);
 fprintf(f,”\n\n”);
 printf(“Вторая строка:\n”);
 fprintf(f,” Втораястрока:\n”);
 l2 = lev2;
 do{
 fseek(ff, l2,SEEK_SET);
 fscanf(ff,”%s”,input);
 printf(“%s”,input);
 fprintf(f,”%s”,input);
 l2=ftell(ff);
 }while(l2
 printf(“\n\n”);
 fprintf(f,”\n\n”);
 getch();
//************************алгоритм сравнения слов
 fseek(ff, 0, SEEK_SET);
 l1 = lev1;
//****************************************
 b = 0;
 p[0] = ‘\0’;
//****************************************
 k=0;
 printf(“********************************************\n”);
 fprintf(f,”********************************************\n”);
 do{
         fseek(ff,l1, SEEK_SET);
         fscanf(ff,”%s”,buf);
         l1 =ftell(ff);
          l2 =lev2;
         while((cha(buf[strlen(buf)-1]) == 0)&&(strlen(buf) != 0)){
          buf[strlen(buf)-1]= ‘\0’;
         }
         do{
          fseek(ff,l2, SEEK_SET);
          fscanf(ff,”%s”,bf);
          l2=ftell(ff);
          while((cha(bf[strlen(bf)-1]) == 0)&&(strlen(bf) != 0)){
                    bf[strlen(bf)-1]= ‘\0′;
          }
          if(strlen(buf) == strlen(bf)){
//*********************проверка отдельно каждого символа
                   l=-1;
                   do{ l++;
                    b=-1;
                    b= sravn_char(buf[l],bf[l]);
                   }while((b== 0)&&(l
//************************вывод результата прверки
                   if((b == 0)&&( strlen(buf) == strlen(p))){
                    printf(«Общее найбольшое слово:’%s’\n»,buf);
                    fprintf(f,«Общеенайбольшое слово :’%s’\n»,buf);
                   }
                   if((b == 0)&&( strlen(buf) > strlen(p))){
                    p= strdup(buf);
                   }
          }
          }while(l2
 }while(l1
if (strlen(p)!= 0){
 printf(«Общее найбольшое слово:’%s’\n»,p);
 fprintf(f,«Общеенайбольшое слово :’%s’\n»,p);
}
else{
 printf(«Общих словв предложениях нет\n»);
 fprintf(f,«Общихслов в предложениях нет\n»);
}
fclose(f);
getch();
break;
//************************************************************
case 48:clrscr(); exit(1);
default: gotoc;
}
//***********************КОНЕЦ ************************
 return 0;
}
Тестовые примеры.
TEST № 1
Данные берем из файла:q.txt
********************************************
 Первая строка
I have manygreen apples
 Вторая строка:
I have manygreen bananas
********************************************
Общее наибольшее слово :’green’
TEST № 2:
Данные вводятся склавиатуры.
********************************************
 Первая строка:
I learn in the Institute of Artificial Intelligence
 Вторая строка:
My frienddidn’t learn in the Institute of Artificial Intelligence
********************************************
Общее наибольшее слово:’Intelligence’

Выводы: в ходе даннойлабораторной работы я изучил элементарную работу со строками, создание иоткрытие файлов, а также непосредственное использование указателей длянахождения нужной информации в память.