在文件中搜索int

时间:2015-07-02 08:22:26

标签: c++

所以我应该在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;
        }
    }
}

2 个答案:

答案 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.为什么不直接阅读文件直到你到达目的地?