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

How to store specific integers from a .txt file in an array of structures?

本文关键字:整数 存储 数组 结构 txt 文件      更新时间:2023-10-16

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

//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();
}

这个程序目前所做的就是从文件中读取所有数据。我不知道如何从这里继续。

在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。

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

只要读一下就行了。不要解读它们,因为在你能够证明它们被正确解读之前,试图对这些数字做任何事情都没有意义。所有额外的代码都会搅乱确保你阅读正确的水域,并向你隐藏错误的位置。

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

为什么是矢量?因为这是存储未知数量条目的最简单方法。在这一点上,不要玩更复杂的结构,也不要试图自己滚动。如果教练说,"没有矢量"哦。但这是你交的。你用来证明算法有效的是另一回事。

    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串上。