Форум программистов, компьютерный форум CyberForum.ru

Сравнение 2х массивов в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
vaselisa
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 4
04.05.2012, 10:48     Сравнение 2х массивов в С++ #1
Ребята, помогите пожалуйста написать вот такую прогу:
Запросить и считать два массива у пользователя (две последовательности целых чисел а1, а2, …, аn и c1, c2, …, ck, n < k.). Для нахождения дан-ных создать и использовать функцию. Выяснить, является ли вторая последовательность подпоследовательностью первой.
Например, последовательность 4, 6, 3 является подпоследовательностью последовательности 0, 2, 4, 6, 3, -1, 1.
После вывода ответа запросить у пользователя, хочет ли он ввести другие входные данные. Если ответ ‘y’, повторить весь процесс, если ответ ‘n’, то завершить работу программы.

Два массива задать смогла, а как и куда добавить функцию сравнения массивов не знаю..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "stdafx.h"
#include <iostream>
using namespace std;
void result(int mass1[], mass2[]);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    char rep;
    int n, k;
    int i, j;
 
    do{
        n=0;
         cout << "Input n: ";
         cin >> n;
        int *mass1 = new int[n];
            for(int i=0; i<n;i++){
                cout << "Input i[" <<i<<"]: ";
                cin >> mass1[i];
        }
    cout << "Do you want to repeat? (y-yes, n-no): ";
    cin >> rep;
  }
  while(rep=='y');
 
    do{
      k=0;
      cout << "Input k>n: ";
      cin >> k;
        int *mass2 = new int[k];
            for(int i=0; i<k;i++){
                cout << "Input i[" <<i<<"]: ";
                cin >> mass2[i];
        }
     cout << "Do you want to repeat? (y-yes, n-no): ";
     cin >> rep;
    }
    while(rep=='y');
 
    delete[] mass1;
    delete[] mass2;
    
    return 0;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Helmsman
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 4
04.05.2012, 17:28     Сравнение 2х массивов в С++ #2
Сам в программировании новичек, вот мое решение если можно, скажите свои мнения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
using namespace std;
 
const int n=5,m=3;
bool  saerch(int * ar1,int * ar2) 
{                
      int sum;
      bool flag=false;
  sum=0;
   for(int i=0;i<m;i++)
   {
           for(int j=i;j<i+m;j++)
           {
                   if(ar1[j]==ar2[i])
                   {
                              sum++; 
                   }
           }  
           if(sum==m)
           {
                     flag=true; 
                     break; 
           } 
   }
   return flag;
}
 
int main(int argc, char *argv[])
{
    int ar1[]={4,5,6,7,8};
    int ar2[]={6,7,8};
 
   if(saerch(ar1,ar2))
   cout<<"yes";
   else
   cout<<"no";
   int q;
   cin>>q;
   return 0;
}
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
04.05.2012, 17:59     Сравнение 2х массивов в С++ #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если попроще, то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
 
template <typename InputIterator>
bool isInclude(InputIterator first1, InputIterator last1,
               InputIterator first2, InputIterator last2)
{
    for (; first2 != last2; ++first1)
    {
        if (first1 == last1 || *first2 < *first1)
            return false;
        if ( !(*first1 < *first2) )
            ++first2;
    }
    return true;
}
 
int main()
{
    char menu;
    do {
        std::vector <int> a, b;
        std::cout<<"Enter first vector"<<std::endl;
        std::copy(std::istream_iterator <int> (std::cin), std::istream_iterator <int> (), back_inserter(a));
        std::cin.clear();
        std::cout<<"Enter second vector"<<std::endl;
        std::copy(std::istream_iterator <int> (std::cin), std::istream_iterator <int> (), back_inserter(b));
        std::cin.clear();
        std::cout<<(isInclude(a.begin(), a.end(), b.begin(), b.end()) ? "Yes" : "No")<<std::endl;
        std::cout<<"Continue? y / n"<<std::endl;
        std::cin>>menu;
    } while(menu == 'y');
  return 0;
}
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
04.05.2012, 18:06     Сравнение 2х массивов в С++ #4
Helmsman, в функции лучше не привязываться к константным размерам массивов, а передавать эти размеры в функцию как параметры. Так функция будет универсальнее.
saerch по английски на самом деле search

Добавлено через 3 минуты
Helmsman, ещё в функции, похоже, возможен выход за границу массива, так как размер n вообще не учитывается. Сумма в цикле не сбрасывается, так что возможны ложные срабатывания.
Helmsman
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 4
04.05.2012, 19:42     Сравнение 2х массивов в С++ #5
grizlik78, спасибо за критику)), попытаюсь улучшить
vaselisa
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 4
09.05.2012, 15:50  [ТС]     Сравнение 2х массивов в С++ #6
спасибо всем за помощь
У меня появился еще один вариант реализации задачи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "stdafx.h"
#include <iostream>
using namespace std;
bool Seq(int *a, int *b, int n, int k);
 
void main(){ 
char rep = 'y';
int i;
bool res = false;
int n, k;
while (rep == 'y'){
 
cout << "Enter the number of elements of the first array (n?)  " << endl;
cin >> n;
 
cout << "Enter the number of elements of the second array (k?)  " << endl;
cin >> k;
 
int *mass1 = new int[n];
int *mass2 = new int[k];
 
for (i=1; i<=n; i++){
cout << "Enter " << i << " element of the first array   ";
cin >> mass1[i];}
 
for (i=1; i<=k; i++){
cout << "Enter " << i << " element of the second array   ";
cin >> mass2[i];}
 
res = (Seq(mass1,mass2, n,k));
 
if (res){
cout << "Second array include first!" << endl;
}
else{ 
cout << "Second array NOT include first!" << endl;
rep = NULL;
}
delete[] mass1;
delete[] mass2;
}
}
 
bool Seq(int *a, int *b, int n, int k){
bool q = true;
int index = 0;
int i,j;
j=1;
 for (i=1; i<=k-n+1; i++){
     if (a[j]==b[i]){
         index=i+1;}
 }
 if (index != 0){
     j++;
     for (i=index; i<=n; i++){
 if (a[j]==b[i]){
 j++;
 
} else {q = false;
 }
}
 } else {q = false;}
return q;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2012, 12:02     Сравнение 2х массивов в С++
Еще ссылки по теме:

C++ Сравнение массивов
Сравнение двух массивов C++
Сравнение массивов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
sawzzz
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 3
29.05.2012, 12:02     Сравнение 2х массивов в С++ #7
Помогите пожалуйста необходимо написать программу для сравнения сравнения двумерного массива размерностьб 5 на 10 с одномерным массивом и совпавшие строки вывести на экран. как это сделать вообще не имею представления. Буду очень благодарен. Спасибо
Yandex
Объявления
29.05.2012, 12:02     Сравнение 2х массивов в С++
Ответ Создать тему
Опции темы

Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru