所以我应该在source3.txt中获取所有的内容并检查它们中的哪一个出现在source.txt中。如果没有出现任何一个,我应该从source2.txt打印一个相应的行到output.txt(source2.txt包含源3中数字的描述,顺序相同,每个描述是1行) 。我写了这段代码,但它只打印source2.txt的最后一行,而且它是一行错误的行。 我不知道可能出错了什么。你能救我吗?
#include <bits/stdc++.h>
using namespace std;
int main()
{
ifstream source ("source.txt");
ifstream source2 ("source2.txt");
ifstream source3 ("source3.txt");
vector<int> tab(1051,0);
vector<string> tab2(857,*new string);
vector<int> tab3(857,0);
ofstream output("output.txt");
for(int i=0;i<1050;++i)
{
source>>tab[i];
}
for(int i=0;i<856;++i)
{
string a;
getline(source2,a);
tab2[i]=a;
source3>>tab3[i];
}
for(int i=0;i<856;++i)
{
if(std::find(tab.begin(), tab.end(), tab3[i]) != tab.end())
{
continue;
}
else
{
output<<tab2[i]<<endl;
}
}
}
答案 0 :(得分:1)
我认为下面对代码的修改应该对你有用。将SOURCE_COUNT的值替换为1051,将SOURCE2_COUNT替换为857
#include <iostream>
#include <fstream>
#include <vector>
#include <vector>
const int SOURCE_COUNT = 4;
const int SOURCE2_COUNT = 3;
//const int SOURCE2_COUNT = 3;
using namespace std;
int main()
{
ifstream source ("source.txt");
ifstream source2 ("source2.txt");
ifstream source3 ("source3.txt");
vector<int> tab(SOURCE_COUNT,0);
vector<string> tab2(SOURCE2_COUNT,"");
vector<int> tab3(SOURCE2_COUNT,0);
ofstream output("output.txt");
for(int i=0;i<SOURCE_COUNT;++i)
{
source>>tab[i];
}
for(int i=0;i<SOURCE2_COUNT;++i)
{
string a;
getline(source2,a);
tab2[i]=a;
source3>>tab3[i];
}
for(int i=0;i<SOURCE2_COUNT;++i)
{
if(std::find(tab.begin(), tab.end(), tab3[i]) != tab.end())
{
continue;
}
else
{
output<<tab2[i]<<endl;
}
}
}
答案 1 :(得分:0)
在我看来,只有在您不找到号码的情况下才打印。换句话说,if语句中的情况是相反的。它应该是:
if(std::find(tab.begin(), tab.end(), tab3[i]) != tab.end())
output<<tab2[i]<<endl;
[编辑]哎呀,我不够仔细地阅读这个问题。如果该数字未包含在source3中,它应该打印该行。所以循环应该是:
if(std::find(tab.begin(), tab.end(), tab3[i]) == tab.end())
output<<tab2[i]<<endl;
另外:我强烈建议取消所有这些常量,如856和1050.为什么不直接阅读文件直到你到达目的地?