如何在结构数组中存储.txt文件中的特定整数?

时间:2015-12-09 00:14:24

标签: c++ arrays function file data-structures

在名为" data.txt"的文件中有1-4的数字。 (例如2 1 2 4 1 3 ......)。我需要读取这些数字并创建每个100个数字的字符串。之后我需要计算每个字符串中有多少1s,2s 3s和4s。这就是我到目前为止所做的:

//structure
struct DNAnt
{
    int a, c, g, t;
    string strand;
};
void data2DNA();

//main
int _tmain(int argc, _TCHAR* argv[])
{
    data2DNA();

    cin.get();
    return 0;
}

//function 
void data2DNA()
{
    DNAnt DNAstrand[100];
    ifstream inFile;
    int numbers;
    inFile.open("data.txt");
    if(inFile.is_open())
    {
        while(!inFile.eof())
        {
            inFile >> numbers;  
        }
    }
    else
        cout << "ERROR!";

    inFile.close();
}

此刻所有程序都会读取文件中的所有数据。我不知道如何从这里继续。

2 个答案:

答案 0 :(得分:0)

通常在C ++中,您需要使用循环来重复动作若干次。在你的情况下,我相信你可以从for循环中受益。下面是一个循环示例,它将读取100个整数并将每个整数存储到数组中您在主要开头附近的位置:

int i;
for(i = 0; inFile && i < 100; ++i) { //i will range from 0 to 99
    inFile >> DNAstrand[i];
}
//now use DNAstrand to do stuff

我说inFile &&的原因是为了确保inFile不在eof。

答案 1 :(得分:0)

从一个非常简单的程序开始,该程序从文件中读取数字。

请阅读它们。不要解释它们,因为没有必要尝试对这些数字做任何事情,直到你能证明它们被正确读出。所有额外的代码都可以确保您正确阅读并隐藏错误的位置。

vector<int> readFile()
{
    vector<int> numbers; 

为何选择矢量?因为这是存储未知数量条目的最简单方法。此时不要玩更复杂的结构,也不要尝试自己动手。如果教练说,&#34;没有矢量&#34;那好吧。但这就是你提交的内容。用来证明算法有效的是另一个故事。

    ifstream inFile("data.txt");

这也会打开文件,以便您以后不必这样做

    if(inFile.is_open())
    {
        int number;
        while(inFile >> number) 

这读入一个int。如果由于任何原因它无法读取int,它将停止并离开循环。如果文件格式不正确并且包含无法转换的数据,我们就在这里。如果它到达文件的末尾,我们就会离开这里。

        {
            numbers.push_pack(number);

否则,我们将读取的数字放入矢量中。

        }
    }
    else
    {
        cout << "ERROR opening file";
    )

不需要关闭该文件。当我们点击函数inFile的结尾时,析构函数将会触发并为我们执行。

    return numbers;

然后将向量发送回调用者,以便他们可以使用它,但他们认为合适。这里可以发生一系列有趣的事情,以防止矢量被复制,因此不必担心它。

}

所有在一起:

void data2DNA()
{
    vector<int> numbers; 
    ifstream inFile("data.txt");
    if(inFile.is_open())
    {
        int number;
        while(inFile >> number) 
        {
            numbers.push_pack(number);
        }
    }
    else
    {
        cout << "ERROR opening file";
    )
    return numbers;
}

现在您已掌握了数据,您可以继续将其转化为一串核酸。

对于这部分,我将推荐一个数组

const char tags[] = {'-', 'A', 'C', 'G', 'T'};

索引1到4是A,C,G和T,因此tags[2]将提供'C'。这使得从数字转换为标签非常容易。

一旦有标签,就可以将其附加到DNA字符串中。