Как сравнить числа из потока, если повторяется одно и то же число - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь получить те же числа, которые повторяются, чтобы записать в другой поток функцию void lygink

void lygink (int s,int e,int n,int a , int m,info K[],int &sk)
{
    a=0;
    for (int i=1; i<=m; i++)
    {
        if(K[i].j==K[i].l) ;
        else {
        e=K[i].j;
        s=K[i].j;
        if (e==s)  {
        cout <<  e<< endl;

        }
        }
    }
}

Весь код выглядит следующим образом:

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
struct info
{
    int jurg,lin,k;

};
void skaityk(int &n,int &m,int lin, int jurg, info K[])
{
    {
        ifstream fd ;
        fd.open ("U2duom.txt");
        fd >> n >> m;
        for (int i=1; i<=n; i++)
        {
            fd>>K[i].lin ;
            cout<<fixed<<setprecision(2)<<" " <<K[i].lin;
        }
        cout << " "<< endl;
        for (int i=1; i<=m; i++)
        {
            fd>>K[i].jurg ;
            cout<<fixed<<setprecision(2)<<" " <<K[i].jurg;
        }
        cout << " "<< endl;
        fd.close();
    }
}
void lygink (int s,int e,int n,int a , int m,info K[],int &k)
{
    a=0;
    for (int i=1; i<=m; i++)
    {
        if(K[i].jurg==K[i].lin) ;
        else {
        e=K[i].jurg;
        s=K[i].jurg;
        if (e==s)  {
        cout <<  e<< endl;

        }
        }
    }
}
int main()
{
    int n,e,m,a,lin,jurg,s,k;
    s=22;
    info K[500];
    skaityk(n, m,lin, jurg, K);
    lygink(s,e,n,a,m,K,k);
    int i;
    return 0;
}

и файл

8 14
5 6 6 9 14 25 8 26
5 20 6 7 13 7 9 10 12 20 15 16 21 5

Он должен дать мне только 7 и 20, но он дает все, что не совпадают, и я не могу понять, как извлечь те числа, которые мне нужны, чтобы удалить числа, которые делают не повторять или как-то получить числа, которые повторяются

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Я бы сделал эту работу несколько иначе. В качестве первой попытки, я бы, вероятно, сделал что-то в таком общем порядке:

#include <iostream>
#include <set>
#include <sstream>

int main() { 

    std::istringstream input(R"(
        8 14
        5 6 6 9 14 25 8 26
        5 20 6 7 13 7 9 10 12 20 15 16 21 5 
    )");

    std::set<int> numbers;

    int n;

    while (input >> n)
         if (!numbers.insert(n).second)
            std::cout << n << "\n";
}

Это производит больше выходных данных, чем просто 7 и 20, но осмотр рукой, кажется, подтверждает, что все, что он говорит, является дубликатом на самом деле.

1 голос
/ 18 января 2020

Используйте std :: sort для сортировки массива и std ::acent_find для поиска дубликатов. Хороший программист использует доступные инструменты и не изобретает велосипед каждый раз.

std::unordered_set<int> unique(std::vector v) {
    std::sort(std::begin(v), std::end(v));
    auto it = std::adjacent_find(std::begin(v), std::end(v));
    std::unordered_set<int> ret;
    while (it != std::end(v)) {
        ret.insert(*it);
        std::advance(it, 2);
        it = std::adjacent_find(it, std::end(v));
    }
    return ret;
}
...