如果重复相同的数字,如何比较流中的数字
How to compare numbers from a stream if the same number repeats
我正在尝试将重复的相同数字写入不同的流
函数 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,但它给出了所有不相同的数字,我无法弄清楚如何提取那些我需要消除不重复的数字或以某种方式得到的数字重复
我会做一些不同的工作。作为第一次尝试,我可能会按照这个一般顺序做一些事情:
#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 多,但手工检查似乎证实它所说的一切都是重复的。
使用 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;
}
我正在尝试将重复的相同数字写入不同的流
函数 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,但它给出了所有不相同的数字,我无法弄清楚如何提取那些我需要消除不重复的数字或以某种方式得到的数字重复
我会做一些不同的工作。作为第一次尝试,我可能会按照这个一般顺序做一些事情:
#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 多,但手工检查似乎证实它所说的一切都是重复的。
使用 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;
}