2015-12-13 2 views
2

Мне нужно написать программу, которая узнает, включен ли один из двух векторов в другой. Программа работает именно так.Поиск, если 1 вектор включен во 2-й вектор

1 - Получает m и n значения из input.txt (1-й строки)

2 - изменяют размеры verctorM и vectorN к m и n, а затем заполняют их с номерами от input.txt (2-я строки для vectorM, 3-й строки для vectorN)

3 - После заполнения, программа должна выяснить, которым один из векторов имеет наименьшее количество «символов», сравнивая n и m

4 - Программа получает первый «характер» «маленького» вектора и начать сравнивать его с «символами» из «большого» вектора()

5 - Когда statemant vectorN[i] = vectorM[0] правильно, то программа сравнивает следующие «символы», если каждый «символ» «малого» вектора находится в «большом» векторе, выход программы 1, если не по-прежнему сравнивается с 1-м «символом» вектора «smal», если «маленький» вектор не входит в «большой» вектор, программа выводит 0

Edit - номера должны быть в том же порядке, как написано в input.txt

Вот код, который я закончил с

#include <iostream> 
#include <vector> 
#include <fstream> 
using namespace std; 

int main() { 

int m; 
int n; 

bool y = false; 

vector<int> vectorM; 
vector<int> vectorN; 

ifstream file1; 
file1.open("input.txt"); 
file1 >> m; 
file1 >> n; 

vectorM.resize(m); 
vectorN.resize(n); 

for (int i = 0; i < m; i++){ 
    file1 >> vectorM[i]; 
} 

for (int i = 0; i < n; i++){ 
    file1 >> vectorN[i]; 
} 

//this is the part that I need help with 


ofstream file2; 
file2.open("output.txt"); 

if (y == false) 
    file2 << 0; 
else 
    file2 << 1; 

} 

Что ЭФФЕКТИВНЫЙ способ сравнить «символы» ??

Например, если в input.txt

4 3 
1 2 3 2 
1 2 3 

выходы программы 1, потому что 1 2 3 в 1 2 3 2, но если

2 3 
1 2 
2 3 1 

выходы программы 0

+0

Алгоритм, описанный в задании, неверен. Векторы могут иметь дубликаты. Рассмотрим, например, два вектора. Один из них - {1, 2, 3, 4}, а другой - {1, 1, 1}. Описанный подход дает результат 1, хотя наименьший вектор не входит в самый большой вектор. –

+0

, когда инструкция верна, программа сравнивает следующий символ, в вашем примере, когда 'V1' является' {1,2,3,4} 'и' V2' является '{1,1,1}', программа сравнивает 'V1 [i]' с 'V2 [0]', когда оператор корректен, программа сравнивает 'V1 [i + 1]' с 'V2 [1]', когда оператор неверен, программа начинает находить другую 'i' –

+0

Ну просто сделайте небольшие изменения V1 {2, 3, 1, 4} и V1 {1, 1, 1}. И как работают петли? –

ответ

4

Я думаю, что вы спрашивает, можно ли найти смежную подпоследовательность внутри другого диапазона значений. Алгоритм стандартной библиотеки std::search делает именно это.

#include <algorithm> 
#include <iostream> 
#include <vector> 

bool included(const std::vector<int>& seq, const std::vector<int>& sub) 
{ 
    return std::search(seq.begin(), seq.end(), sub.begin(), sub.end()) != seq.end(); 
} 

int main() 
{ 
    auto v1 = std::vector<int>{ 1,2,3,2 }; 
    auto v2 = std::vector<int>{ 1,2,3 }; 

    std::cout << std::boolalpha << included(v1, v2) << '\n'; 

    auto v3 = std::vector<int>{ 1,2 }; 
    auto v4 = std::vector<int>{ 2,3,1 }; 

    std::cout << included(v3, v4) << '\n'; 
} 

Demo on ideone.com

Примечание: Я украла имя функции Jarod42 в и тестовые данные coincoin в.

+0

Я думаю, что это именно то, чего хочет OP. – coincoin

+0

@Blastfurnace, это работает!, Спасибо :) –

Смежные вопросы