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

Posted

技术标签:

【中文标题】如何将 .txt 文件中的特定整数存储在结构数组中?【英文标题】:How to store specific integers from a .txt file in an array of structures? 【发布时间】:2015-12-09 00:14:24 【问题描述】:

在名为“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();

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

【问题讨论】:

while 循环应该是您获取 100 位数字字符串的地方,但它现在没有做任何事情。至于其余的,取决于您打算如何处理计数和 100 位字符串。 numbers 变量看起来更像您希望“存储”的行为方式。尝试将numbers 的类型更改为容器(如std::vector)并从那里移动。 while(!inFile.eof()) 几乎从不工作。 Read more here。在这种情况下,这是错误的,会导致您读取文件末尾并在数字中放置一些未知值。 【参考方案1】:

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

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 &amp;&amp; 是为了确保 inFile 不在 eof 处。

【讨论】:

【参考方案2】:

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

只需阅读它们。不要解释它们,因为在你能证明它们被正确读取之前,试图对这些数字做任何事情是没有意义的。所有额外的代码都会混淆确保您正确阅读并隐藏错误位置的水域。

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";
    )

不需要关闭文件。当我们到达函数inFiles 的末尾时,析构函数将触发并为我们执行此操作。

    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 字符串中。

【讨论】:

以上是关于如何将 .txt 文件中的特定整数存储在结构数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件中的特定信息读入结构

如何从存储在文件中的表中获取特定索引

读取特定行中的值(可变数量的值)并将它们存储在数组中

如何将 Kinesis 流存储到 S3 存储桶中特定文件夹结构中的 S3 存储

C# 从 .txt 读取并拆分为结构数组

如何将文件中的值存储到数组中?