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

какая-то лаба

.txt
Скачиваний:
0
Добавлен:
06.10.2025
Размер:
5.99 Кб
Скачать
#include <iostream>
#include <sstream>
#include <conio.h>
#include <fstream>
#include <windows.h>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> Length(vector<char> text1, vector<char> text2);
vector<char> findCommonText(vector<char> text1, vector<char> text2, vector<vector<int>>);
void Red_black();
void Green_black();
void Default();
void menu();
void setcur(int x, int y);

int main(int argc, char* argv[]) {
    SetConsoleOutputCP(CP_UTF8);
	if (argc == 3) {
		system("cls");
		int length1 = 0;
		int length2 = 0;
		char ch;
		int open1 = 0;
		int open2 = 0;
		ifstream text1(argv[1]);
		if (text1.is_open()) {
			open1 = 1;
		}
		while (text1.get(ch)){
			length1++;
		}
		vector<char> f1(length1);
		text1.close();

		text1.open(argv[1]);
		for (int i = 0; i < length1; i++) {
			text1.get(ch);
			f1[i] += ch;
		}
		text1.close();
		ifstream text2(argv[2]);
		if (text2.is_open()) {
			open2 = 1;
		}
		while (text2.get(ch)) {
			length2++;
		}
		vector<char> f2(length2);
		text2.close();
		text2.open(argv[2]);
		for (int i = 0; i < length2; i++) {
			text2.get(ch);
			f2[i] += ch;
		}
		text2.close();
		if (open1 == 1 && open2 == 1) {
			int rows = f1.size();
			int cols = f2.size();
			vector<vector<int>> matrix = Length(f1, f2);
			vector<char> LCS = findCommonText(f1, f2, matrix);
			menu();
			int x = 0;
			int y = 3;
			setcur(x, y);
			int count = 0;
			for (int i = 0; i < f1.size(); i++) {
				if (x < 102 && f1[i] != '\n') {
					if (count < matrix[rows][cols] && f1[i] == LCS[count]) {
						Green_black();
						cout << f1[i];
						Default();
						count++;
					}
					else {
						Red_black();
						cout << f1[i];
						Default();
					}
					x++;
				}
				else if (x == 102 && f1[i] == '\n') {
					cout << f1[i];
					y++;
					x = 0;
				}
				else if (x != 102 && f1[i] == '\n') {
					if (count < matrix[rows][cols] && f1[i] == LCS[count]) {
						Green_black();
						cout << f1[i];
						Default();
						count++;
					}
					else {
						Red_black();
						cout << f1[i];
						Default();
					}
					x = 0;
					y++;
				}
				else {
					y++;
					x = 0;
					setcur(x, y);
					if (count < matrix[rows][cols] && f1[i] == LCS[count]) {
						Green_black();
						cout << f1[i];
						Default();
						count++;
					}
					else {
						Red_black();
						cout << f1[i];
						Default();
					}
				}
			}
			for (int i = 3; i < y; i++) {
				setcur(103, i);
				cout << "|||";
			}
			for (int i = 3; i < y; i++) {
				setcur(103, i);
				cout << "|||";
			}
			y = 3;
			x = 106;
			setcur(x, y);
			count = 0;
			for (int i = 0; i < f2.size(); i++) {
				if (x < 210 && f2[i] != '\n') {
					if (count < matrix[rows][cols] && f2[i] == LCS[count]) {
						Green_black();
						cout << f2[i];
						Default();
						count++;
					}
					else {
						Red_black();
						cout << f2[i];
						Default();
					}
					x++;
				}
				else if (x == 210 && f2[i] == '\n') {
					y++;
					x = 106;
					cout << f2[i];
					setcur(x, y);
				}
				else if (x != 210 && f2[i] == '\n') {
					if (count < matrix[rows][cols] && f2[i] == LCS[count]) {
						Green_black();
						cout << f2[i];
						Default();
						count++;
					}
					else {
						Red_black();
						cout << f2[i];
						Default();
					}
					x = 106;
					y++;
					setcur(x, y);
				}
				else {
					y++;
					x = 106;
					setcur(x, y);
					if (count < matrix[rows][cols] && f2[i] == LCS[count]) {
						Green_black();
						cout << f2[i];
						Default();
						count++;
					}
					else {
						Red_black();
						cout << f2[i];
						Default();
					}
				}
			}
			for (int i = 3; i < y; i++) {
				setcur(103, i);
				cout << "|||";
			}
			for (int i = 3; i < y; i++) {
				setcur(103, i);
				cout << "|||";
			}
		}
		else if(open1 == 0 || open2 == 0) {
			cout << "Один из файлов не открыт";
		}
	}
	else {
		cout << "Недостаточно аргументов";
	}
	_getch();
    return 0;
}
vector<vector<int>> Length(vector<char> text1, vector<char> text2) {
	int rows = text1.size();
	int cols = text2.size();
	vector<vector<int>> matrix(rows + 1, vector<int>(cols + 1, 0));
	for (int i = 0; i < rows; i++) {
		for (int j = 0; j < cols; j++) {
			if (text1[i] == text2[j]) {
				matrix[i + 1][j + 1] = 1 + matrix[i][j];
			}
			else {
				matrix[i + 1][j + 1] = max(matrix[i][j + 1], matrix[i + 1][j]);
			}
		}
	}
	return matrix;
}
vector<char> findCommonText(vector<char> text1, vector<char> text2, vector<vector<int>> matrix) {

	int rows = text1.size();
	int cols = text2.size();

	int i = 0, j = 0;
	vector <char> similarity(matrix[rows][cols]);
	while (rows > 0 && cols > 0) {
		if (text1[rows - 1] == text2[cols - 1]) {
			similarity[i] = text1[rows - 1];
			i++;
			rows--;
			cols--;
		}
		else {
			if (matrix[rows - 1][cols] > matrix[rows][cols - 1]) {
				rows--;
			}
			else {
				cols--;
			}
		}
	}
	reverse(similarity.begin(), similarity.end());
	return similarity;
}
void menu() {
    cout << "                         first                                                                       second";
	for (int i = 0; i < 211; i++) {
		cout << "";
	}
	for (int i = 0; i < 100; i++) {
		cout << "";
	}
	for (int i = 0; i < 211; i++) {
		cout << "";
	}
}
void Green_black() {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
}
void Red_black() {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
}
void Default() {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void setcur(int x, int y)
{
	COORD coord;
	coord.X = x;
	coord.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void SetFullscrn() {  // sets terminal to fullscreen

}
Соседние файлы в предмете Программирование на C++