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

СОДЕРЖАНИЕ: Цель работы: Научиться работать со строками с помощью указателей. Задание: Найти самое длинное общее слово двух заданных предложений. Требования к программе:

Цель работы: Научиться работать со строками с помощью указателей.

Задание:

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

Требования к программе:

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 conio.h

#include string.h

#include stdlib.h

#include math.h

#include stdio.h

/*титульныйлист*/

void tit_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 (char char1){

if( ((char1 -16)(char1 -33)) || ((char1 -80)(char1 -129)) || ((char1 96)(char1 123)) || ((char1 64)(char1 91))){ return 1;}

else { return 0; }

}

int sravn_char (char c1,char c2){

if (abs(c1) abs(c2)){

switch (abs(c1 - c2)){

case 32: if ( ( (c1 -129)(c1 -112) )||( (c1 96)(c1 123) ) ){

return 0;}

else {return -2;} break;

case 80: if ((c1 -113)(c1 -96)){

return 0;}

else {return -3;} break;

default: ;return -1;break;

}

}

else{

switch (abs(c2 - c1)){

case 0: return 0;break;

case 32: if ( ( (c2 -129)(c2 -112) )||( (c2 96)(c2 123) ) ){

return 0;}

else {return -2;} break;

case 80: if ((c2 -113)(c2 -96)){

return 0;}

else {return -3;} break;

default: return -1; break;

}

}

}

int main(void)

{

tit_list();

clrscr();

char *input,*name;

char *p,*bf,*buf,*str1,*str2;

int b=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();

char fstr1[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=b;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=v;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 strlen(buf)-1));

//************************************************************

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 R O R \n В файле не имееться двух предложений!!!\n Введите другое имя файла: );

fprintf(f,\t\t E R R 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 prv1);

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 prv2);

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 strlen(buf)-1));

//************************ выводрезультатапрверки

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 prv2);

}while(l1 prv1);

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: goto c;

}

//*********************** КОНЕЦ ************************

return 0;

}

Тестовые примеры.

TEST № 1

Данные берем из файла: q.txt

********************************************

Перваястрока

I have many green apples

Втораястрока:

I have many green bananas

********************************************

Общее наибольшее слово : green

TEST № 2:

Данные вводятся с клавиатуры.

********************************************

Первая строка:

I learn in the Institute of Artificial Intelligence

Втораястрока:

My friend didn’t learn in the Institute of Artificial Intelligence

********************************************

Общее наибольшее слово: Intelligence’


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

Скачать архив с текстом документа