如果重复相同的数字,如何比较流中的数字

问题描述 投票:-1回答:2

我正在尝试获得相同的数字,然后重复将其写入不同的流函数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,但给出的所有不一样,我不知道如何提取那些数字,我需要消除那些不重复的数字或以某种方式获得重复的数字

c++ fstream
2个回答
1
投票
我在工作上会有所不同。作为第一步,我可能会按照以下一般顺序进行操作:

#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
投票
使用std :: sort对数组进行排序,并使用std :: adjacent_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; }

© www.soinside.com 2019 - 2024. All rights reserved.